【每日刷题】Day25

【每日刷题】Day25

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 238. 除自身以外数组的乘积 - 力扣(LeetCode)

2. 82. 删除排序链表中的重复元素 II - 力扣(LeetCode)

3. 445. 两数相加 II - 力扣(LeetCode)

1. 238. 除自身以外数组的乘积 - 力扣(LeetCode)

//思路:使用两个数组,分别存储左边元素的乘积和、右边元素的乘积和,在使用一个数组,存储这两个数组的每个位置元素的和。

int* productExceptSelf(int* nums, int numsSize, int* returnSize)

{

    int * ans = (int*)malloc(sizeof(int)*numsSize);

    int left[numsSize];//用于存储左边元素乘积和

    int right[numsSize];//用于存储右边元素乘积和

    int i = 0;

    left[0] = 1;

    for(i = 1;i<numsSize;i++)//计算原数组各个位置左边元素乘积

    {

        left[i] = left[i-1]*nums[i-1];

    }

    right[numsSize-1] = 1;

    for(i = numsSize-2;i>=0;i--)//计算原数组各个位置右边元素乘积

    {

        right[i] = right[i+1]*nums[i+1];

    }

    for(i = 0;i<numsSize;i++)

    {

        ans[i] = left[i]*right[i];//相加则是原数组各个位置除自身以外的元素乘积和

    }

    *returnSize = numsSize;

    return ans;

}

2. 82. 删除排序链表中的重复元素 II - 力扣(LeetCode)

//思路:哈希。这题由于链表中的元素存在小于0的,因此使用哈希时需要将小于0的数处理为>0的数。因为数据范围为-100~100,因此,可以将<0的数+201,将数据范围改为0~200,这样就可以使用哈希来解决。

typedef struct ListNode LN;

struct ListNode* deleteDuplicates(struct ListNode* head)

{

    if(head==NULL)

    {

        return NULL;

    }

    if(head->next==NULL)

    {

        return head;

    }

    int hash[1000] = {0};

    LN* pmove = head;

    while(pmove)

    {

        if(pmove->val<0)

        {

            pmove->val+=201;//将链表中小于0的数处理为>100的数

        }

        hash[pmove->val]+=1;//计算数据出现的次数

        pmove = pmove->next;

    }

    LN* Sentry = (LN*)malloc(sizeof(LN));//新链表用于接收只出现一次的数

    Sentry->next = NULL;

    LN* newhead = Sentry;

    if(head->val>100)//这里需要考虑链表中是否存在小于0的数,如果存在,则新链表接收数据的顺序需要相应改变

    {

        for(int i = 101;i<=200;i++)//先将<0的数存入新链表

    {

        if(hash[i]==1)//==1说明数据只出现了一次,存入新链表

        {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = NULL;

        newnode->val = i-201;

        newhead->next = newnode;

        newhead = newhead->next;

        }

    }

    for(int i = 0;i<=100;i++)//再存入>0的数

    {

        if(hash[i]==1)

        {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = NULL;

        newnode->val = i;

        newhead->next = newnode;

        newhead = newhead->next;

        }

    }

    }

    else

    {

        for(int i = 0;i<=100;i++)//链表中不存在<0的数则直接存储即可

        {

            if(hash[i]==1)

            {

                LN* newnode = (LN*)malloc(sizeof(LN));

                newnode->next = NULL;

                newnode->val = i;

                newhead->next = newnode;

                newhead = newhead->next;

            }

        }

    }

    return Sentry->next;

}

3. 445. 两数相加 II - 力扣(LeetCode)

//思路:使用两个数组arr1、arr2分别存储l1和l2的val。然后分别从后往前遍历数组相加存储进数组arr中,步骤和67. 二进制求和 - 力扣(LeetCode)//一致。最后再创建一个新链表,将数组arr中的数据存储进新链表返回

typedef struct ListNode LN;


 

int max(int x,int y)

{

    return x>y?x:y;

}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)

{

    LN* Sentry = (LN*)malloc(sizeof(LN));//新链表的哨兵位

    Sentry->next = NULL;

    LN* newhead = Sentry;

    int i = 0;

    int j = 0;

    int arr1[100] = {0};

    int arr2[100] = {0};

    int arr[101] = {0};

    LN* pmove1 = l1;

    LN* pmove2 = l2;

    int flag = 0;

    while(pmove1)//将l1的val存进arr1

    {

        arr1[i++] = pmove1->val;

        pmove1 = pmove1->next;

    }

    while(pmove2)//将l2的val存进arr2

    {

        arr2[j++] = pmove2->val;

        pmove2 = pmove2->next;

    }

    i--;//定位到数组的最后一个元素

    j--;

    int max1 = max(i,j);//用于判断arr数组中存储数据的长度,arr0下标的位置需要空出来

    int max2 = max1;

    while(i>=0||j>=0)

    {

        int x = (i>=0)?arr1[i]:0;

        int y = (j>=0)?arr2[j]:0;

        arr[max2+1] = (x+y+flag)%10;//max2+1能够保证arr中0位置空出,并且存储进arr1、arr2相加后的数

        if(x+y+flag>=10)

        {

            flag = 1;

        }

        else

        {

            flag = 0;

        }

        max2--;

        if(i>=0)

        {

            i--;

        }

        if(j>=0)

        {

            j--;

        }

    }

    if(flag)//如果出了循环flag还为1,说明最高位也进了位,将arr数组0位置处的元素置为1

    {

        arr[0] = 1;

        for(i = 0;i<=max1+1;i++)//从arr数组0位置开始将数据存入新链表

    {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = NULL;

        newnode->val = arr[i];

        newhead->next = newnode;

        newhead = newhead->next;

    }

    }

    else

    {

        for(i = 1;i<=max1+1;i++)//如果flag为0,则说明最高位没有进1,则直接从arr数组1位置开始存入

    {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = NULL;

        newnode->val = arr[i];

        newhead->next = newnode;

        newhead = newhead->next;

    }

    }

    return Sentry->next;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构练习:链表扩容

大致步骤&#xff1a; 一&#xff1a;创建一个新链表&#xff0c;遍历原链表的同时&#xff0c;将原链表的值复制给新链表 二&#xff1a;将新链表插入到原链表中&#xff08;大致如下&#xff09; 注&#xff1a; 1.头结点是不存有数据的 2.记得malloc后要free 3.*&是…

uniapp真机调试无法调用之前页面的方法

在uniapp通过getCurrentPages&#xff08;&#xff09;页面栈调用之前页面方法&#xff0c;h5可生效但app真机调试找不到方法 let pages getCurrentPages()let beforePage pages[pages.length - 3]beforePage.refresh() //真机调试refresh为undefined解决&#xff1a; 后面…

5G前传光纤传输的25G光模块晶振SG2016CAN

一款适用于5G前传光纤传输网络中的25G光模块的5G晶振SG2016CAN。随着5G时代的到来&#xff0c;5G晶振的重要性也不言而喻&#xff0c;小体积宽温晶振SG2016CAN可以用于5G前传的25G光模块&#xff0c;具有高稳定性、小体积、宽温等优势。在5G前传光纤传输网络中&#xff0c;25G光…

操作系统课程--考纲要求

第一/二次课&#xff1a; 绪论 【学习内容与目标】 1、操作系统目标及定义 掌握操作系统的设置目标&#xff0c;理解并掌握操作系统的定义&#xff0c;了解操作系统的地位以及从资源管理者角度和用户角度了解操作系统的组成。 2、 操作系统的特征与功能 掌握操作系统的特征&…

吴恩达2022机器学习专项课程(一) 6.2 逻辑回归第三周课后实验:Lab2逻辑回归

问题预览/关键词 逻辑回归预测分类创建逻辑回归算法Sigmoid函数Sigmoid函数的表示sigmoid输出的结果Numpy计算指数的方法实验python实现sigmoid函数打印输入的z值和sigmoid计算的值可视化z值和sigmoid的值添加更多数据&#xff0c;使用逻辑回归可以正常预测分类![在这里插入图片…

【C++航海王:追寻罗杰的编程之路】C++11(四)

目录 1 -> 相关文章 【C航海王&#xff1a;追寻罗杰的编程之路】C11(一) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(二) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(三) 2 -> lambda表达式 2.1 -> C98中的一个例子 2.2 -> lambda表达式 2.3 ->…

【国产虚拟仪器】 NI-9205模块国产替代,±10 V,250 kS/s,16位,32通道C系列电压输入模块

10 V&#xff0c;250 kS/s&#xff0c;16位&#xff0c;32通道C系列电压输入模块 ​NI‑9205​可​执行​单​端​或​差分​模拟​输入&#xff0c;​每​个​具有​四​个​可​编​程​的​输入​范围。 该​模​块​以​较​低​的​价格​提供​了​高​通道​数​和​高…

Markdown编辑器的使用

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Netperf网络测试

Netperf网络测试 Netperf简介安装NetperfCentos7安装NetperfWindows安装Netperf 批量网络流量性能测试启动netserver服务端 查看netperf帮助查看netper参数查看netserver参数 TCP_STREAM测试启动netserver服务端客户端 UDP_STREAM测试启动netserver服务端客户端 测试请求/应答网…

【Python】Python语言基础

1、运用python的输入输出函数 2、运行python的条件表达式 3、练习导入库函数并使用 1、运用输入输出函数编写程序&#xff0c;将华氏温度转换成摄氏温度。换算公式&#xff1a;C(F-32)*5/9,其中C为摄氏温度&#xff0c;F为华氏温度。 &#xff08;1&#xff09;源代码&#…

心理学上有个概念叫:习惯性反驳(附上解决办法)

在心理学上&#xff0c;有一个词&#xff0c;叫做习惯性反驳。 什么意思呢&#xff1f; 就是不管你说什么&#xff0c;他都要反驳你&#xff0c;最后把你带入负面的情绪黑洞&#xff0c;搞得你非常崩溃。 一个总是习惯性反驳的人&#xff0c;其实是非常可怕的。 习惯性反驳的3个…

.net EntityFramework EF

创建EF 方法1 方法二 安装的 版本是 中间没有弹出让选框架的界面&#xff0c; EF三种开发方式 1》》 db first 先设计数据库→然后在代码通过EF与数据库建立映射关系&#xff0c;是EF最早的一种使用方式,使用广泛.以数据库为驱动&#xff0c;生成实体模型&#xff0c;从而驱…

喀秋莎Camtasia2023中文破解Crack下载附安装教程 2023免费补丁百度云 电脑版注册机提取

Camtasia2023破解版是一款备受好评的电脑录屏软件&#xff0c;主要用于教授课程&#xff0c;培训他人&#xff0c;以及进行沟通和屏幕分享。内置视频编辑器支持拖放文本&#xff0c;提供了强大的屏幕录像、视频的剪辑和编辑、视频菜单制作、视频剧场和视频播放功能等&#xff0…

C#实现 IDbConnection / IDbCommand 等相关通用数据接口

目录 关于数据接口 对象执行流程 范例运行环境 设计与实现 引用 GetConnection方法 GetCommand方法 GetParameter方法 小结 关于数据接口 在.net 应用中&#xff0c;与数据库进行连接、访问和执行经常会用到数据接口的相关对象&#xff0c;如下&#xff1a; 1、 Con…

【深度学习实战(26)】标签处理之语义分割标签转换,数据集划分

一、标签转换 我们在使用labeme标签工具&#xff0c;标注完数据后会获得json文件。在标注结束过后&#xff0c;我们需要通过标签转换操作&#xff0c;生成jpg格式原始图片和png格式mask标签图。 1.1 使用img_b64_to_arr将json标签中二进制图像数据变成numpy格式数据&#xf…

场外个股期权是什么

场外个股期权是什么 场外个股期权是指在沪深交易所之外交易的个股期权&#xff0c;其本质是一种金融衍生品&#xff0c;允许投资者在股票交易场所外以特定价格买进或卖出证券。这种权利与股价变动情况紧密相关&#xff0c;使得投资者能够根据股价的变动情况对公司进行投票决定…

docker中的资源控制

前言 docker 使用cgrqup控制资源&#xff0c;K8S 里面也有limit&#xff08;使用上限&#xff09; docker通过cgroup来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 Control …

想要应聘前端工程师——学习路线指南

前端工程师学习路线 按照前端岗位需求,以优先学习工作更需要,面试更常考的内容为原则,由浅入深,层层铺垫,与时俱进,可以较容易地总结出前端学习路线图: HTML / CSS / JavaScript 基础学习 《Web 入门》 MDN 权威入门指南,HTML / CSS / JavaScript 快速上手 《CSS 世界…

安装库后JupyterLab一直报ModuleNotFoundError问题解决

背景&#xff1a; 先安装的Python3.10&#xff0c;安装在默认路径&#xff1a; C:\Users\#用户名省略#\AppData\Local\Programs\Python\Python310\ 后安装的Anaconda&#xff0c;更改过路径在D盘&#xff1a; D:\ProgramData\anaconda3 此时C盘Python安装路径下Scripts文件…

通过阿里云OOS实现定时备份redis实例转储到OSS

功能背景 随着企业业务数据的快速增长&#xff0c;Redis 作为高性能的内存数据存储方案&#xff0c;在多种应用场景下承担着重要的角色。为确保数据安全&#xff0c;定时备份成为了不可或缺的一环。Redis 实例定时备份是关键数据库管理任务的一个重要组成部分&#xff0c;它主…
最新文章