标题:88. 合并两个有序数组
难度:简单
示例 1:
示例 2:
示例 3:
提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109
进阶:你可以设计实现一个时间复杂度为 O(m + n)
的算法解决此问题吗?
解题思路:
1.既然nums1
实际长度是m + n
那么就从后向前添加数据
2.因为都是有序递增数组,如果nums2
添加完毕了,那么就退出循环
3.然后分别用m1记录遍历nums1到哪里,用n2记录nums2遍历到哪里
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int m1 = m-1;
int n2 = n-1;
//从最后一位开始添加
for(int i = m + n -1;i >= 0;i--){
//确保nums2都已转移到nums1
if(n2 >= 0){
//m1 >= 0 是 防止 m = 0 的情况数组越界
if(m1 >= 0 && nums1[m1] > nums2[n2]){
nums1[i] = nums1[m1];
m1 -= 1;
}else{
nums1[i] = nums2[n2];
n2 -= 1;
}
}else{
break;
}
}
}
}