C语言每日一题:6.移除元素+合并两个有序数组。

第一题:移除元素

请添加图片描述

思路一:

一:暴力查找的方法:
1.找到对应val值的下标,返回数组的下标。
2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问题)。
3.删除了一个数之后数组元素个数要–。
4.查找和删除是在一个循环里面因为val的值可能在数组中出现多次,直到返回的下标的值没有了,就结束了循环,val的数值都移除完了。

// 顺序表查找
int SeqListFind(int* ps, int x,int nume)
{//遍历查找int n = nume;for (int i = 0; i < n; i++){if (ps[i] == x){return i;}}return -1;
}
// 顺序表删除pos位置的值
void SeqListErase(int* ps, int pos,int num)
{int n = num;for (int i = pos; i < n-1; i++){ps[i] = ps[i+1];}
}int removeElement(int* nums, int numsSize, int val){while(1){int b=SeqListFind(nums,val,numsSize);if(b==-1){break;}else{SeqListErase(nums,b,numsSize);numsSize--;}}return numsSize;
}

思路二:

二:使用双指针的方法
1.不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
2.定义两个下标:src和dis,他们开始的时候是在一起的对应的数组值都不是val的时候,同时++。
3.只要src位置是val就src++;
4.当src位置不是val就把src位置的值赋值到dis,到src>n-1循环结束

int removeElement(int* nums, int numsSize, int val)
{int src=0;int dis=0;int n=numsSize;int count=0;while(src<=n-1){if((src==dis) && (nums[src]!=val)){src++;dis++;}else if((nums[src]==val)){src++;count++;}else if((nums[src]!=val)){nums[dis]=nums[src];src++;dis++;}}return n-count;
}

第二题:

请添加图片描述
第二题:

思路一:

一.双指针的方法
1.定义p1,p2 两个变量,初始化为0从两个数组开头开始向后移动。
2.同时比较nums1[p1]和nums2[p2]这两个位置的数值。
3.开辟一个新的数组大小为m+n两个数组长度的和。
4.在比较的过程中较小的值放到新的数组,开辟数组的下标++,小的值的数组的下标++。
5.结束条件p1>=m 中有一个 p2>=n就结束。
6.出来之后另一个没有放完,p1=m,说明nums2没有放完。反之同理。
7.tmp拷贝回去到nums1中
空间复杂度是O(N)时间复杂度O(2*(M+N));

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int p1=0;int p2=0;int* tmp=(int*)malloc(sizeof(int)*(m+n));int i=0;while((p1<m)&&(p2<n)){if(nums1[p1]>=nums2[p2]){*(tmp+i)=nums2[p2];p2++;i++;continue;}else if(nums1[p1]<nums2[p2]){*(tmp+i)=nums1[p1];p1++;i++;continue;}}if(p1>m-1){memcpy(tmp+i,nums2+p2,sizeof(int)*(n-p2));}else if(p2>n-1){memcpy(tmp+i,nums1+p1,sizeof(int)*(m-p1));}memcpy(nums1,tmp,sizeof(int)*(m+n));
}

思路二:

三指针的方法:
1.p1起始位置是m-1,p2起始位置是n-1.数组值的尾。
2.end起始位置是(m+n)-1在nums1上。
3.分别从尾开始比较赋值到nums1[end]位置,谁赋值过去对应的p就–,end–。
4.当p1==-1,p2还没有结束需要把值赋值到对应的num1上。
5.当p2==-1就说明已经结束。
时间复杂度优化到了O(m+n)
请添加图片描述

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int p1=m-1;int p2=n-1;int end=(m+n)-1;while(p1>=0 && p2>=0){if(nums1[p1]>nums2[p2]){nums1[end]=nums1[p1];p1--;end--;}else{nums1[end]=nums2[p2];p2--;end--;}}while(p2>=0){nums1[end]=nums2[p2];p2--;end--;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

width: calc(~“100% - 267px“);动态css 调样式

.result-filtering {color: #8b8b8b;display: flex;// width: 82.6%;width: calc(~"100% - 267px");}

5.python设计模式【单例模式】

内容&#xff1a;保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点角色&#xff1a; 单例&#xff08;Singleton&#xff09; UML图 举个例子&#xff1a; 需求&#xff1a;一个类只能实例化一个对象&#xff0c;不能实例化多个对象 from abc import abstract…

RocketMQ教程-(5)-功能特性-事务消息

事务消息为 Apache RocketMQ 中的高级特性消息&#xff0c;本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。 事务消息为 Apache RocketMQ 中的高级特性消息&#xff0c;本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。…

数据库触发器简介——修改数据的触发器、删除数据的触发器

1.修改数据的触发器 修改数据的触发器 create trigger tb_user_update_triggerafter update on tb_user for each row begininsert int user_logs(id,operation,operate_time,operate_id,operate_params)VALUES(null,update,now(),new.id,concat(更新之前的数据&#xff1a;i…

如何设置Axure中文版 Mac系统下axurerp10怎么设置成中文

有许多小伙伴肯定想知道axure rp 10怎么转换为中文版&#xff0c;接下来就为大家带来最详细的汉化教程&#xff0c;大家可以根据教程一步一步操作&#xff0c;保证可以汉化成功&#xff01; 准备工作 安装好axurerp10 axurerp10汉化包 百度网盘链接: 百度网盘 请输入提取码 …

PostgreSQL实战-数据库迁移部署

PostgreSQL实战-数据库迁移部署 介绍 根据项目需求&#xff0c;我们需要将现有的PostgreSQL数据库重新部署到新的服务器上。由于项目本身就是基于PostgreSQL数据库构建的&#xff0c;因此数据库迁移将变得十分便捷。接下来&#xff0c;我将简要介绍我们的迁移步骤。 迁移步骤…

2.1 色彩空间

色彩发送器 色彩认知&#xff1a;光源是出生点&#xff0c;光源发射出光线&#xff0c;光线通过直射反射折射等路径最终进入人眼。但是人眼接收到光线后&#xff0c;人眼的细胞产生了一系列化学反应。由此把产生的新号传入大脑&#xff0c;最终大脑对颜色产生了认知感知。 光的…

第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

string基本概念 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char区别 1、char是一个指针 2、string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char型的容器。 特点&#xff1a; string类内部封装了很多成员方…

PostMan+Jmeter工具介绍及安装

目录 一、PostMan介绍​编辑 二、下载安装 三、Postman与Jmeter的区别 一、开发语言区别&#xff1a; 二、使用范围区别&#xff1a; 三、使用区别&#xff1a; 四、Jmeter安装 附一个详细的Jmeter按照新手使用教程&#xff0c;感谢作者&#xff0c;亲测有效。 五、Jme…

【数据结构】树状数组和线段树

树状数组和线段树 下文为自己的题解总结&#xff0c;参考其他题解写成&#xff0c;取其精华&#xff0c;做以笔记&#xff0c;如有描述不清楚或者错误麻烦指正&#xff0c;不胜感激&#xff0c;不喜勿喷&#xff01; 树状数组 需求&#xff1a; 能够快速计算区间和保证在修改…

fastadmin采坑之接口分页处理

其实不算fastadmin的代码而是thinkphp自带的分页代码 paginate函数就是自带的分页函数&#xff0c;开始我以为这个只能用于渲染模板不能用于接口&#xff0c;后面看到源代码发现请求参数带page就可以 /*** ApiTitle (获取协会会员)* ApiSummary (获取协会会员)* ApiMethod …

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

【C语言进阶】程序环境和预处理

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C语言 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过…

现代控制理论

B站学习视频https://space.bilibili.com/230105574/channel/seriesdetail?sid1569601 一.引入状态-空间表达 &#xff08;本质上是使用一组向量的线性组合来表示整个系统任意物理量&#xff0c;也就是一个特征分解的过程&#xff09; 现代控制理论的基础是 状态-空间表达方…

Emacs之实现跨程序选中自动复制功能(一百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

贪心算法重点内容

贪心算法重点内容 4.1部分背包 按照单位重量的价值排序 4.2最小生成树 两种算法 4.3单源最短路径 4.4哈夫曼树

自守数 C语言实现

自守数 描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff1a;25^2 625&#xff0c;76^2 5776&#xff0c;9376^2 87909376。请求出n(包括n)以内的自守数的个数 数据范围&#xff1a; 1≤n≤10000 输入描述&#xff1a; int型整数 输出描述&#xf…

【Leetcode】54.螺旋矩阵

一、题目 1、题目描述 给你一个 m m m 行 n n n 列的矩阵 matrix,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例1: 输入:matrix =

k8s: kubectl: logs: rotate 问题

https://kubernetes.io/docs/concepts/cluster-administration/logging/ 当kubenet存放container的日志满了的时候,会发生rotate,当rotate发生的时候,是由kubectl logs 这个命令可能会出现以下两个问题: https://github.com/kubernetes/kubernetes/issues/28369 这里说,当…

Git下载与安装

文章目录 一、Git下载二、Git安装1.双击下载好的安装包进行安装2.Next3.选择Git的安装目录(不要带有中文和空格)→Next4.Next5.Next6.Next7.Next8.Next9.Next10.Next11.Next12.Next13.Next14.Next15.Next16.Install17.等待安装18.Finish19.鼠标光标放到系统桌面右击看到如下图所…