题目

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

大致意思

给定两个数组,以及两个长度。然后把这两个数组进行合并。合并到nums1即可。

需要注意的是


var nums1 = [1,0]
var m = 1
var num2 = [2]
var n = 1

// 这个时候,针对于nums1,里面的0是不需要进行merge的。nums2也是同理

解决方案

  • 分为两种情况

  • m !== 0

    • 从高到底,把nums2的数据插入到nums1中去
  while (n > 0) {
    nums1[n - 1] = nums2[n - 1];
    n--;
  }
  • m === 0
    • 两个数组从高位开始进行大小对比,又高到底进行插入。由于数组是经过排列的,所有无须关心数组内的大小问题
while (n > 0 && m > 0) {
  if (nums1[m - 1] > nums2[n - 1]) {
    nums1[m + n - 1] = nums1[m - 1];
    m--;
  } else {
    nums1[m + n - 1] = nums2[n - 1];
    n--;
  }
}

源代码

var merge = function(nums1, m, nums2, n) {
  while (n > 0 && m > 0) {
    if (nums1[m - 1] > nums2[n - 1]) {
      nums1[m + n - 1] = nums1[m - 1];
      m--;
    } else {
      nums1[m + n - 1] = nums2[n - 1];
      n--;
    }
  }

  while (n > 0) {
    nums1[n - 1] = nums2[n - 1];
    n--;
  }
};