Skip to content

传送门

88. 合并两个有序数组

image.png

逆序双指针

逆序双指针

image.png

题解

javascript
var merge = function (nums1, m, nums2, n) {
  // 定义两个指针,分别指向两数组最后一个元素
    let i = m - 1;
    let j = n - 1
    // idx用来记录合并后用来写入的位置index
    let idx = m + n - 1;

    // 当两数组都还有未合并元素
    while (i >= 0 && j >= 0) {
      // 如果第一个数组元素大,把它放到合并数组中,然后向左移动
        nums1[idx--] = nums1[i] >= nums2[j] ? nums1[i--] : nums2[j--];
    }

    // 第二个数组如果还有未合并,全部加入到数组一中
    while (j >= 0) {
        nums1[idx--] = nums2[j--];
    }
};

// i--; --在变量后面,先用后减, i--是i的原值
// --i; --在变量前面,先减后用,--i 等于 i-1 后的值;

PS记忆

  1. a-- 可以理解为“我先用 a,然后你(计算机)在空闲的时候把它减少 1”。a-- 首先会返回 a 的当前值,然后才会把 a 减少 1。
  2. --a 可以理解为“在我使用 a 之前,你(计算机)先把它减少 1”。--a 会首先把 a 减少 1,然后返回新的 a 值。