Skip to content

088合并数组

code

javascript
/**
 * @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) {
    if(n === 0) {
        return nums1;
    }
    let ind1 = m - 1;
    let ind2 = n - 1;
    let indLast = nums1.length - 1;
    while(ind1 >= 0 && ind2 >= 0){
        if(nums1[ind1] < nums2[ind2]){
            nums1[indLast] = nums2[ind2];
            ind2--;
            indLast--;
        } else {
            [nums1[indLast], nums1[ind1]] = [nums1[ind1], nums1[indLast]];
            indLast--;
            ind1--;
        }
    }
    // 有一个干了
    if(ind2 < 0) {
        return;

    }
    for(let i = ind2; i >=0; i--){
        nums1[i] = nums2[i];
    }
    return;
};

总结

  1. 反正看见有序,迭代,数组基本就是双指针,没啥毛病,但是他内里有什么数学结构么,比如说为啥链表用快慢指针,数组,字符串用双指针遍历,我觉得比较神奇
  2. 做题时候可以手写个 [1,2,3,0,0,0] [4,5,6]出来可以测一下
  3. 没啥毛病,又这个思路没k应该也还好