Skip to content

Latest commit

 

History

History
25 lines (19 loc) · 776 Bytes

88合并两个数组.md

File metadata and controls

25 lines (19 loc) · 776 Bytes

思路很重要!首先最好的方法是不占用额外存储空间,因为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--];
        }

    }
}