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,一经查实,立即删除!

相关文章

ASCII对照表

文章目录 介绍ASCII对照表 介绍 ASCII(American Standard Code for Information Interchange)是美国信息交换标准代码。基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准&#xff0c;并等同于国际标准ISO/IEC 646。AS…

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

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

leetcode131. 分割回文串(java)

分割回文串 leetcode131. 分割回文串题目描述回溯算法 动态规划代码演示 回文字符串 leetcode131. 分割回文串 题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一…

[踩坑记] Linux环境下bitsandbytes安装是后报错解决

情境 在测试LLM Webui demo的时候&#xff0c;安装依赖pip install bitsandbytes0.40.0 后&#xff0c;python -m module name 时报错:CUDA Setup failed despite GPU being available. Please run the following command to get more information。 解决方法 从git hub 官方…

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

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

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

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

Kotlin与Java语法对比学习

定义变量 // Kotlin val i: Int 10 // 定义一个整数变量 val d: Double 10.0 // 定义一个双精度浮点数变量 val b: Boolean true // 定义一个布尔变量 val c: Char a // 定义一个字符变量 val s: String "Hello, World!" // 定义一个字符串变量 val arr: …

PostgreSQL查看数据库对象大小

PostgreSQL查看数据库对象大小 PostgreSQL查看数据库对象大小1、查看某个数据库大小2、查看多个数据库大小3、按顺序查看索引大小4、查看所有对象的大小 PostgreSQL查看数据库对象大小 1、查看某个数据库大小 select pg_size_pretty(pg_database_size(tzqdb));2、查看多个数据…

【已解决】VS报错C2760

在项目中增加第三方库的时候&#xff0c;出现了C2760的报错&#xff0c;常用路径都设置好了&#xff0c;判断可能是属性设置的问题&#xff0c;就查了一下&#xff0c;确实一下就改好了 操作流程&#xff1a; 项目右键后打开最下面的属性 属性——》C/C——》语言——》符合…

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

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汉化包 百度网盘链接: 百度网盘 请输入提取码 …

2023牛客暑期多校训练营2(D/E/F/H/I/K)

目录 D.The Game of Eating E.Square F.Link with Chess Game H.0 and 1 in BIT I.Link with Gomoku K.Box D.The Game of Eating 思路&#xff1a;倒着贪心。因为正着贪会导致一种局面&#xff1a;我选了当前喜爱值最大的菜&#xff0c;但是就算我不选这个菜&#xff0…

PostgreSQL实战-数据库迁移部署

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

halcon线扫描相机平面交点检测--

目录 代码示例代码示例的逐句解释 以下是halcon中的代码示例 * This example shows the inspection of planar intersections of * 3D objects. The intersections are derived by intersecting the * reconstructed 3D object models with suitable planes, using the * o…

2.1 色彩空间

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

如何把爱好变成事业?

如何把爱好变成事业&#xff1f; 目录 引言爱好与事业的关系如何把爱好变成事业 研究市场需求建立专业技能制定计划与目标 追求爱好的「变现」的利与弊 利&#xff1a;工作的乐趣与激情弊&#xff1a;压力与挑战 如何平衡爱好与事业 分清爱好与事业的界限建立时间管理和优先级…

数据结构-时间空间复杂度

目录 前言 1.什么是数据结构 2.什么是算法 3.数据结构和算法的重要性 1.算法的时间复杂度和空间复杂度 1.1算法效率 1.1.1如何衡量一个算法的好坏 1.1.2算法的复杂度 1.2时间复杂度 1.2.1时间复杂度的概念 1.2.2大O的渐进表示法 2.编程练习 2.1.1 排序遍历 2.1.2 2.1.3 单身狗解…

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

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

[JAVAee]wait方法与sleep方法的区别

①最明显的一个区别是,wait方法需要搭配synchronized关键字进行使用.而sleep方法的使用不需要 ②wait是一个Object类的方法,sleep是Thread类的一个静态方法 方法说明 public static void sleep(long millis) throws interruptedException 使当前正在执行的线程以指定的毫秒数…

PostMan+Jmeter工具介绍及安装

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