工作生活

LeetCode之合并两个有序数组——JavaScript实现

2019-06-30  本文已影响0人  极奏

合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

示例:

输入:
 nums1 = [1,2,3,0,0,0],  m = 3
 nums2 = [2,5,6],    n = 3
输出:
 [1,2,2,3,5,6]

我的想法
将两个数组先合并,然后排序去零即可

遇到的坑
一开始想用es6的展开语法...来合并两个数组,发现不符合题意,题目意思是要用能改变原数组的方法。
题意:

  • @return {void} Do not return anything, modify nums1 in-place instead.

回去看了下文档,...不改变原来的数组,如果对...的具体说明感兴趣可以看文章末尾。

代码

const merge = function (nums1, m, nums2, n) {
    for (let i = 0; i < n; i++) {
        nums1[m + i] = nums2[i]
    }
    nums1 = nums1.sort(sortNum)
    while (nums1[0] == 0 && nums1.length > m + n) {
        nums1.shift()
    }
    return nums1
}

leetcode上最快的解法

思路
先去零再遍历nums2数组合并

函数说明
splice()

slice()

findIndex()

代码实现:

var merge = function(nums1, m, nums2, n) {
    nums1.splice(m, nums1.length-m)
    nums2.slice(0, n).forEach(value => {
        const index = nums1.findIndex(num => num > value);
        if(index < 0){
          nums1.splice(nums1.length, 0, value)
        } else {
          nums1.splice(index, 0, value)
        }
    });
};

...es6展开符

上一篇下一篇

猜你喜欢

热点阅读