Shinkai005

V1

2022/02/12阅读:38主题:红绯

# 【leetcode】88.合并两个有序数组

【leetcode】88.合并两个有序数组.md

image-20220212085245101
image-20220212085245101

题目描述

image-20220105215625654
image-20220105215625654

题目思路

  1. 首先数组已经排序了

  2. 想到第一个方法, 那不就是直接把0的位置替换成num2不就可以.刚好符合splice方法,并且 修改原数组.

  3. 第二个方法,因为已经排序了,因此用链表做也可以.

    1. 每次把num1 和num2的最小元素放到 sorted数组里

第二个方法双指针有个问题, 会把nums1[1,2,3,0,0,0] nums2[2,5,6]会在nums1的3还没取出的时候覆盖掉,因此需要临时变量;

如果倒序插入就不会有这个问题.

个人题解

/**
 * @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 = nums1.length - 1
    m--
    n--
    while(n >= 0) {
        if(nums1[m] > nums2[n]) {
            nums1[i--] = nums1[m--]//倒序所以先用大的
        } else {
            nums1[i--] = nums2[n--]
        }
    }
};


/**
 * @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{
nums1.splice(m,n,...nums2)
nums1.sort((a,b)=>a-b);//复杂度有问题哦,因为很多情况是不需要再次排序,如果重新sort复杂度会很高.
};

官方题解

官方还有一种是顺序的,用临时变量就不写了.

分类:

前端

标签:

JavaScript

作者介绍

Shinkai005
V1

公众号:深海笔记Shinkai