思路很重要!首先最好的方法是不占用额外存储空间,因为nums1的长度够用。
需要三个指针,指向nums1索引 m + n - 1,nums1 复制索引 m - 1, nums2 复制索引 n - 1
从 nums1的m + n - 1位置向前开始摆放两个数组中最大的元素(两个数组都是有序的因此只需要对比每个数组最后一个元素即可)
注意边界条件,只要(n >= 0),就没复制完
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tot = m + n -1;
--m;
--n;
while(m >= 0 && n >= 0){
nums1[tot--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
}
while(n >= 0){
nums1[tot--] = nums2[n--];
}
}
}