JavaScript-合并两个有序数组

9次阅读

共计 566 个字符,预计需要花费 2 分钟才能阅读完成。

function merge(nums1, nums2) {
  var len1 = nums1.length - 1;
  var len2 = nums2.length - 1;
  var len = nums1.length + nums2.length - 1;

  while (len1 >= 0 && len2 >= 0) {nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
  }
  return nums1;
}

输入
[1, 2, 3] [2, 4, 5, 6, 7, 8, 9]
输出
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9]

解析

  1. 获取数组 1, 数组 2 以及合并之后的数组的长度
  2. 从后遍历比较, 当 len1 或 len2 为 0 的时候退出

    序号 len1 len2 len nums1[len1] nums2[len2] nums
    1 2 6 9 3 9 [1, 2, 3, empty*6, 9]
    2 2 5 8 3 8 [1, 2, 3, empty*5, 8, 9]
    3 2 4 7 3 7 [1, 2, 3, empty*4, 7, 8, 9]
    4 2 3 6 3 6 [1, 2, 3, empty*3, 6, 7, 8, 9]
    5 2 2 5 3 5 [1, 2, 3, empty*2, 5, 6, 7, 8, 9]
    6 2 1 4 3 4 [1, 2, 3, empty*1, 4, 5, 6, 7, 8, 9]
    7 1 1 3 3 2 [1, 2, 3, 3, 4, 5, 6, 7, 8, 9]
    8 0 1 2 2 2 [1, 2, 2, 3, 4, 5, 6, 7, 8, 9]
正文完
 0