美文网首页
88. Merge Sorted Array( JavaScri

88. Merge Sorted Array( JavaScri

作者: f1a94e9a1ea7 | 来源:发表于2018-11-28 19:10 被阅读8次

两个有序数组 nums1 和 nums2,把 nums2 按大小放进 nums1。

Example:
  • Input:
    nums1 = [1,2,3,0,0,0], m = 3
    nums2 = [2,5,6], n = 3

  • Output: [1,2,2,3,5,6]

解析:

如果让两个数组从头开始循环,那么插入 nums1 的时候插入的这个位置包括后面的所有数都要向后移一位,数组这样操作是麻烦的。
所以从后开始循环。
比较后大的那个数放在 nums1 末尾。

(The following English translation may not be right -.-)

analyze:

if we compares the item in the two arrays with loop from head to the end, it's so complex to insert the bigger num to the nums1, that means the all items behind the num have to move.
so it's should loop from the end to head, then put the bigger num in the nums1's end.

/**
 * @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) {
  let i = m-1;
  let j = n-1;
  let k = nums1.length - 1;

  while (i >= 0 && j >= 0) {
    if (nums1[i] > nums2[j]) {
      nums1[k] = nums1[i];
      i--;
    } else {
      nums1[k] = nums2[j]
      j--
    }
    k--;
  }
  
  // 当 nums2 比 nums1 长时 
  while (j >= 0) {
    nums1[k--] = nums2[j--]
  }
};

相关文章

网友评论

      本文标题:88. Merge Sorted Array( JavaScri

      本文链接:https://www.haomeiwen.com/subject/lzvzqqtx.html