一、题目描述
给你两个有序整数数组nums1
和nums2
,请你将nums2
合并到nums1
中,使nums1
成为一个有序数组。
初始化nums1
和nums2
的元素数量分别为 m 和 n 。
你可以假设nums1
的空间大小等于 m + n,这样它就有足够的空间保存来自nums2
的元素。
二、题目解析
设置两个索引i
和j
分别指向 nums1 和 nums2 的有效元素的尾部,从它们的尾部开始向前遍历。
同时设置索引cur
指向nums1
的最末尾。

在每次遍历过程中,比较i
和j
指向的元素值大小,把大的元素填充到cur
的位置,填充完毕说明那个元素已经放置在它应该放置的位置,不需要在管它了,把cur
向前移动,同时把i
或者j
向前移动。
继续比较i
和j
指向的元素值大小,把大的元素填充到cur
的位置。
三、参考代码
classSolution{
publicvoidmerge(int[]nums1,intm,int[]nums2,intn){
//索引从有序数组nums1有效元素的末端开始
//数组的下标索引从零开始计数
//索引012
//数组[1,2,3]
inti=m-1;
//索引从有序数组nums2的末端开始
intj=n-1;
//从有序数组nums1最末端的位置开始保存元素
intcur=nums1.length-1;
//通过循环把num2的元素都移动到num1中
while(j>=0){
//比较num1和num2中当前的元素大小
//如果num1中的索引位置为i的元素大于num2中索引位置为j的元素
//为了防止越界i必须是大于等于0
if(i>=0&&nums1[i]>nums2[j]){
//把num1中的索引位置为i的元素复制到索引为cur的位置
//此时cur的元素已经确定下来
nums1[cur]=nums1[i];
//接下来去确定cur前面一个元素应该放什么数字
cur--;
//此时,索引i需要向前移动
i--;
//否则,如果num1中的索引位置为i的元素小于或者等于num2中索引位置为j的元素
}else{
//把num2中的索引位置为j的元素复制到索引为cur的位置
nums1[cur]=nums2[j];
//接下来去确定cur前面一个元素应该放什么数字
cur--;
//此时,索引j需要向前移动
j--;
}
}
}
}
审核编辑 :李倩
-
元素
+关注
关注
0文章
47浏览量
8502 -
数组
+关注
关注
1文章
418浏览量
26100
原文标题:LeetCode 26:删除有序数组中的重复项
文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
hyper v 删除,怎么样删除hyper-v中的虚拟机?

指针数组和二维数组有没有区别
浅谈多场景有序充电对公交绿色低碳转型带来的影响
labview字符串数组转化为数值数组
ubuntu删除的文件怎么恢复
重复接地的作用与实施
鸿蒙语言基础类库:ohos.util.HashMap 非线性容器HashMap

服务器数据恢复—存储中卷被删除后重建如何恢复被删除卷的数据?
嵌入式中零长度数组基本操作方法

时序数据库是什么?时序数据库的特点
OpenHarmony语言基础类库【@ohos.util.HashMap (非线性容器HashMap)】

随机抽取SV数组中的一个元素方法实现

评论