likes
comments
collection
share

[LeetCode 88. 合并两个有序数组] 刷题打卡

作者站长头像
站长
· 阅读数 12

一、题目描述

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例 1:

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

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109

二、思路分析

我们读题之后可以理解到题目的要求:

  • nums1合并到nums2中,不能重开一个新数组。
  • 合并完了之后nums1还是一个有序数组。
  • 给的示例1中的nums1nums2当中都有2这个元素,说明也需要将重复的元素合并进去。 这是一道有关数组的题目,值得注意的是题目要求我们不能重新开一个数组,那么这里我们就需要利用数组改变自身的方法来解题
  • 通过数组的splice方法取得nums1的前m项。
  • 通过数组的splice方法取得nums2的前n项。
  • 将数组nums2合并到nums1中。
  • 将合并而成的数组升序排列。

三、代码如下

var merge = function(nums1, m, nums2, n) {
    nums1.splice(m);
    nums2.splice(n);
    nums1.push(...nums2);
    nums1.sort((a,b)=>a-b);
};

四、总结

  • 这道题考查的是数组改变自身的相关知识,通过查找资料,我了解到,在ES6的语法中,会改变数组自身的方法一共有9种,分别为pop,push,reverse,shift,sort,splice,unshift,copyWithin,fill,而我只是了解其中部分的方法和用法,在今后的会深入学习的。

  • leetcode题解可以用时间复杂度解题,奈何本人对时间复杂度和空间复杂度掌握不够精湛,无法给出相应的解法,等过段时间再干