Shinkai005
V1
2022/02/12阅读:38主题:红绯
# 【leetcode】88.合并两个有序数组
【leetcode】88.合并两个有序数组.md
题目描述
题目思路
-
首先数组已经排序了
-
想到第一个方法, 那不就是直接把0的位置替换成num2不就可以.刚好符合splice方法,并且 修改原数组.
-
第二个方法,因为已经排序了,因此用链表做也可以.
-
每次把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复杂度会很高.
};
官方题解
官方还有一种是顺序的,用临时变量就不写了.
作者介绍
Shinkai005
V1
公众号:深海笔记Shinkai