美文网首页工作生活
LeetCode之合并两个有序数组——JavaScript实现

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

作者: 极奏 | 来源:发表于2019-06-30 20:40 被阅读0次

    合并两个有序数组

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

    说明:

    • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
    • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

    示例:

    输入:
     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()

    • splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
      会修改原数组。

    slice()

    • slice() 方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。
      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展开符

    相关文章

      网友评论

        本文标题:LeetCode之合并两个有序数组——JavaScript实现

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