描述
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
输入:nums1 = [1,2,3],nums2 = [2,5,6]
输出:[1,2,2,3,5,6]
解题思路一
1.新建一个 m + n 长度的数组res 2. 准备两个指针 i 和 j,一开始分别指向m-1 和 n-1 3.nums1[i]和nums2[j], 将大的值从res的尾部往前插入 4.判断nums2是否还有剩余的元素,对其插入
function merge(nums1, nums2){
let i = nums1.length -1
let j = nums2.length -1
let res = new Array(nums1.length + nums2.length)
while(i>= 0 && j>=0) {
if (nums1[i] <= nums2[j]) {
res.unshift(nums2[j--])
} else {
res.unshift(nums1[i--])
}
}
if(i >= 0) {
res.unshift(...nums1.slice(0, i + 1))
}
if(j >= 0) {
res.unshift(...nums2.slice(0, j + 1))
}
return res
}
解题思路二
思路一额外增加了空间复杂度不说,还不满足题目要求,题目要是是改变nums1数组得到最后的结果
正确方式:
1.双指针i和j,分别指向m-1 和 n-1 2.从nums1[m + n -1]开始存放nums1[i]和nums2[j]中的最大值 3.指针递减
function merge2(nums1, nums2){
let i = nums1.length -1
let j = nums2.length -1
let k = nums1.length + nums2.length -1
while(i >=0 && j >= 0) {
if(nums1[i] <= nums2[j]) {
nums1[k--] = nums2[j--]
} else {
nums1[k--] = nums1[i--]
}
}
while(j >=0) {
nums1[k--] = nums2[j--]
}
}