[LeetCode 88. 合并两个有序数组] 刷题打卡
一、题目描述
给你两个有序整数数组 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中的
nums1
和nums2
当中都有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
题解可以用时间复杂度解题,奈何本人对时间复杂度和空间复杂度掌握不够精湛,无法给出相应的解法,等过段时间再干
转载自:https://juejin.cn/post/6938352328571355167