1. 题目
2. 分析
这类合并有序数组的题目,我们可以通过双指针的方式进行解决,类似
但是题目中的一个数组已经预留了足够的空间给处理后的数组了,我们怎么保证最小的空间复杂度呢?
即:两个指针从大到小开始遍历。将大的数字往数组a的最后面开始放。
3. 代码
public void merge(int[] nums1, int m, int[] nums2, int n) {
int t = m + n - 1;
m = m - 1;
n = n - 1;
while (t >= 0) {
if (n < 0) {
break;
}
if (m < 0) {
nums1[t--] = nums2[n--];
continue;
}
if (nums1[m] > nums2[n]) {
nums1[t--] = nums1[m--];
} else {
nums1[t--] = nums2[n--];
}
}
}