当前位置: 首页 > news >正文

Leetcode_88. 合并两个有序数组

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:数据结构与算法
小伞的主页:xiaosan_blog

合并两个有序数列

100. 相同的树 - 力扣(LeetCode)

给你两个按非递减顺序排列的整数数组nums1nums2,另有两个整数mn,分别表示nums1nums2中的元素数目。

请你合并nums2nums1中,使合并后的数组同样按非递减顺序排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0输出:[1]解释:需要合并 [1] 和 [] 。 合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1输出:[1]解释:需要合并的数组是 [] 和 [1] 。 合并结果是 [1] 。 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[j] <= 109

常规解法:

因为题目中,给我们准备了空余的空间插入,所以我们先将两个数组变为一个数组,再利用冒泡排序。

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { //插入数组 for(int i=0;i!=n;i++){ nums1[m+i]=nums2[i]; } //冒泡排序 for(int i=0;i<nums1Size-1;i++){ for(int j=0;j<nums1Size-i-1;j++){ if(nums1[j]>nums1[j+1]){ int tmp=nums1[j]; nums1[j]=nums1[j+1]; nums1[j+1]=tmp; } } } }

利用qsort比较函数:

int *comp_int(int *nums1,int *nums2){ return *nums1-*nums2; } void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { for(int i=0;i!=n;i++){ nums1[m+i]=nums2[i]; } qsort(nums1,m+n,sizeof(nums1[0]),comp_int); }

利用qsort函数,可以很快的将代码实现:

移除元素

给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

//nums是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int len = removeElement(nums, val); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }

示例 1:

输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度2, 并且 nums中的前两个元素均为2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,3,0,4]解释:函数应该返回新的长度5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

解法:

int removeElement(int* nums, int numsSize, int val) { int left=0; int right=0; for (int i=0;i<numsSize;i++) { if(nums[i]!=val){//将后一个数据占据前一个为val的值 nums[left]=nums[i]; left++; } } return left;//返回长度 }
http://www.jsqmd.com/news/475381/

相关文章:

  • 如何快速掌握wysihtml5富文本编辑器:自动链接与语义化标记的完整指南
  • Inputmask终极指南:如何快速实现完美的表单输入控制
  • Solarized终端背景图像:色彩方案与壁纸融合技巧
  • 2026年广式茶点品牌测评:地道风味与品质之选 - 2026年企业推荐榜
  • SW - 归档保存装配图时,可以连装配图中的零件一起保存
  • 如何使用ProcessHacker进行系统调用统计:全面分析进程的系统调用频率与类型
  • 在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
  • 漏洞扫描工具实战指南:从原理到渗透测试应用
  • 2026年3月山东蒸汽锅炉品牌综合实力深度解析 - 2026年企业推荐榜
  • 在线查看 Android 系统源代码 Android Code Search
  • 混沌工程终极指南:通过故障演练识别和缓解系统风险的7个关键步骤
  • 红队ATKCK|红日靶场实战复盘与深度解析
  • 2026年保定短视频运营团队专业实力深度评测与选型指南 - 2026年企业推荐榜
  • 在线查看 Android 系统源代码 Git repositories on android
  • 深入理解@tailwindcss/line-clamp实现原理:从源码到实际应用
  • MCM/ICM历年优秀论文解析:从特等奖作品中学习建模思路与写作技巧
  • 网站突然被微信屏蔽?先别急着改代码!这5个自查步骤能省80%时间
  • 面向新能源汽车动力总成控制的多变量实时监控与分析平台
  • 【离散数学速成指南】谓词逻辑9大高频考点解析(左孝凌版)
  • 2026年贵州卫生间改造服务商综合评测与选型指南 - 2026年企业推荐榜
  • 猫狗识别大模型——基于python语言
  • iwebsec靶场多平台搭建对比:虚拟机 vs Docker,哪种更适合你?
  • 华为鸿蒙系统借助GBox沙箱生态,无缝畅享谷歌全家桶应用
  • Maven下载配置
  • linux设置常见开机自启动命令(一)
  • Python实战:用ncnn验证模型转换成功的3种方法(附完整代码)
  • 终极指南:Zelda64Recomp跨平台兼容性详解 - Windows与Linux系统的完美适配方案
  • 三明市商用车主的2026年展望:如何定义可靠的尿素后处理品牌 - 2026年企业推荐榜
  • 从NCDC到本地分析:一站式气象数据获取与Python自动化处理指南
  • 2025年中科院预警期刊全解析:科研小白如何避开论文工厂陷阱?