leetcode 88. 合并两个有序数组

leetcode 88. 合并两个有序数组_第1张图片

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    // 因为最后n位都是0, 所以我们总最后开始重排不会对前面产生不好的影响
    // 双指针法, i初始指向nums1自身数组末尾, j初始指向nums2数组末尾
    let i = m-1, j = n-1, k = m+n-1;
    // nums1或者num2遍历完毕就跳出循环, 把剩下的补充在前面
    while(i>=0 && j>=0){
        // 因为要求最后是非递减顺序, 所以我们倒序重排时候, 重大到小添加
        if(nums1[i] > nums2[j]){
            nums1[k--] = nums1[i--];
        }else{
            nums1[k--] = nums2[j--];
        }
    }
    // 1、如果nums1原始数组在上面while循环内没有被遍历完. nums2被遍历完了
    //    因为是倒序的, 所以nums1前面剩下的未遍历数据就不做处理, 直接得到答案
    // 2、但如果num1被遍历完了, nums2两种情况: 有剩余或者没有, 再用while对nums2可能剩下的数据处理
    while(j>=0){
        nums1[k--] = nums2[j--]
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展,javascript)