You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
function merge (num1, num2, m, n) {
num2.splice(n, num2.length - n)
num1.splice(m, num1.length - m, ...num2)
num1.sort((a, b) => { return a - b })
return num1
}
function foo(ar1, ar2) {
if ((ar1 instanceof Array && ar1.length !== 0) || (ar2 instanceof Array && ar2.length)) {
let i = 0;
while (i < ar2.length) {
ar1.push(ar2[i])
i++;
}
}
ar1.sort((a, b) => a - b)
}
Activity
[-]合并两个有序数组[/-][+]图解leetcode:合并两个有序数组[/+][-]图解leetcode:合并两个有序数组[/-][+]leetcode:合并两个有序数组[/+]BoswellJi commentedon Apr 3, 2020
chenzesam commentedon Apr 3, 2020
快慢指针走一波~
sisterAn commentedon Apr 3, 2020
解题思路:
nums1、nums2有序,若把nums2全部合并到nums1,则合并后的nums1长度为m+nm+n-1的位置填充nums1,比较nums1[len1]与nums2[len2]的大小,将最大值写入nums1[len],即nums1[len1]>=nums2[len2],nums1[len--] = nums1[len1--],这里--是因为写入成功后,下标自动建议,继续往前比较nums1[len--] = nums2[len2--]len1 < 0,即len2 >= 0,此时nums1已重写入,nums2还未合并完,仅仅需要将nums2的剩余元素(0…len)写入nums2即可,写入后,合并完成len2 < 0,此时nums2已全部合并到nums1,合并完成时间复杂度为 O(m+n)
代码实现:
leetcode
sisterAn commentedon Apr 3, 2020
concat() 不会更改现有数组,会返回一个新数组
sisterAn commentedon Apr 3, 2020
想法不错,不过不需要那么麻烦
fishTwelve commentedon Apr 6, 2020
var merge = function (nums1, m, nums2, n) {
nums1.splice(m,n,...nums2)
nums1.sort((a,b) => a-b)
return nums1
}
Loading-m commentedon Apr 7, 2020
ChaoshengZhang commentedon Apr 8, 2020
数组的toString方法,拿到数据,split,unique,sort
let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; let arrStr = arr.toString(); let result = Array.from(new Set(arrStr.split(',').map(item => parseInt(item)))).sort((a,b) => a-b); console.log(result)[-]leetcode:合并两个有序数组[/-][+]leetcode88:合并两个有序数组[/+]whitesky1225 commentedon Apr 19, 2020
时间复杂度感觉应该是O(n)吧
Aiyoweioo commentedon Apr 26, 2020
双指针法
plane-hjh commentedon Apr 28, 2020
这也太暴力了吧。。
[-]leetcode88:合并两个有序数组[/-][+]图解leetcode88:合并两个有序数组[/+]15 remaining items
AnranS commentedon Nov 16, 2020
smileCris commentedon Jan 25, 2021
function merge (num1, num2, m, n) {
num2.splice(n, num2.length - n)
num1.splice(m, num1.length - m, ...num2)
num1.sort((a, b) => { return a - b })
return num1
}
azl397985856 commentedon Mar 3, 2021
题目地址(88. 合并两个有序数组)
https://leetcode-cn.com/problems/merge-sorted-array/
题目描述
公司
前置知识
思路
符合直觉的做法是
将nums2插到num1的末尾, 然后排序具体代码:
这道题目其实和基本排序算法中的
merge sort非常像。我们先来回顾一下 merge sort 的 merge 过程。merge 的过程
可以是先比较两个数组的头元素,然后将较小的推到最终的数组中,并将其从原数组中出队列。不断循环直到两个数组都为空。具体代码如下:
但是 merge sort 很多时候,合并的时候我们通常是新建一个数组,但是这道题目要求的是$O(m)$ 。其实我们能只要从后往前比较,并从后往前插入即可。
原地修改.这就和 merge sort 的 merge 过程有点不同。这里要求原地修改。如果使用类似上面的方法,如果采用从头开始遍历,需要将 nums1 的前 m 个数组放到另一个数组中避免写指针写入的干扰。 这样空间复杂度就是我们需要三个指针:
写指针 current, 用于记录当前填补到那个位置了
m 用于记录 nums1 数组处理到哪个元素了
n 用于记录 nums2 数组处理到哪个元素了
如图所示:
关键点解析
代码
代码支持:Python3, C++, Java, JavaScript
JavaSCript Code:
C++ code:
Java Code:
Python Code:
复杂度分析
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 40K star 啦。
大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
ReAlign commentedon Jul 26, 2021
ReAlign commentedon Jul 26, 2021
jack-hate-titanic commentedon Jul 31, 2021
Deadpool957 commentedon Aug 16, 2021
var merge = function(nums1,m,mums2,n){
nums1.splice(m,nums.length-m,...nums2);
nums1.sort((a,b)=>a-b}
return nums1
}
CrazyPeter commentedon Sep 27, 2021
合并排序
painting-alt commentedon Oct 6, 2021
var merge = function(nums1, m, nums2, n) {
nums1.length = m;
for(let i = 0; i < n; i++){
nums1[m++] = nums2[i]
}
nums1.sort((a,b)=>{return a-b})
return nums1
};
nunuji123 commentedon Oct 18, 2021
sionnigjt commentedon Oct 22, 2021
fa3eng commentedon Jan 10, 2022
LeetCode链接:https://leetcode-cn.com/problems/merge-sorted-array/
难度:简单
解法一:合并数组,然后排序
分析
利用
split方法,拼接两个数组,然后进行排序。解法二:从后往前插入
分析
设置三个指针
nums1Tail 指向 nums1 的末尾(不包括空位)
nums2Tail 指向 nums2 的末尾
Tail 指向 nums1 真正的末尾(包括空位)
然后,对 nums1Tail 和 nums2Tail 所指向的值进行比较,将较大的放置在 tail 指针指向的位置。
接着,更新指针指向位置。直到指针出现非法值,跳出循环。
最后,可能存在 nums2 数组中的值还没有完全遍历,就因为指针出现非法值而停止。因此,我们最后做一个边界处理,将 nums2 中的剩下的值直接插入到 tail 对应的位置。
为什么能直接插入?因为 nums2 中未遍历到的值,肯定都是比 nums1 当前要小的,不然早就放出去了。
边界情况的例子:
hedengxing commentedon Sep 8, 2022
let a1 = [1,2,3,0,0,0];
let a2 = [2,5,6];
a1.splice(a2.length,a2.length,...a2)
a1.sort((a,b)=>(a-b))
fengjinlong commentedon Dec 17, 2022
jf179 commentedon Jan 9, 2023
function foo(ar1, ar2) {
if ((ar1 instanceof Array && ar1.length !== 0) || (ar2 instanceof Array && ar2.length)) {
let i = 0;
while (i < ar2.length) {
ar1.push(ar2[i])
i++;
}
}
ar1.sort((a, b) => a - b)
}