LeetCode每日一题:3.3合并排序的数组(八十三)
合并排序的数组一、LeetCode题解瞧一瞧~博健的LeetCode题解:Gitbook版本传送门博健的LeetCode题解:CSDN传送门有趣的CSS:Gitbook传送门前端进阶笔记:Gitbook传送门二、算法题题目给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别...
·
合并排序的数组
一、LeetCode题解
瞧一瞧~
- 博健的LeetCode题解:Gitbook版本传送门
- 博健的LeetCode题解:CSDN传送门
- 有趣的CSS:Gitbook传送门
- 前端进阶笔记:Gitbook传送门
二、算法题
题目
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n。
示例:
输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
说明:
A.length == n + m
解法一(直接合并排序)
- 按常规思路,将B数组放入A数组后排序
- 时间复杂度:O((m+n)log(m+n))
- 空间复杂度:O(log(m+n))
代码
var merge = function(A, m, B, n) {
let j = 0
for(let i = m; i < m + n; i++){
A[i] = B[j++]
}
A = A.sort((a, b)=>{
return a-b;
})
return A
};
结果
解法二(双指针)
注意审题,给我们两组已经排序
的数组,我们要利用上
思路
- a指针记录A数组元素位置,b指针记录B数组元素位置
- 如果a数组元素符合要求,则a指针左移,反之则b指针左移
代码
var merge = function(A, m, B, n) {
var a = 0, b = 0;
var arr = []
while(a < m || b < n){
if(a === m){
arr.push(B[b++])
}else if(b === n){
arr.push(A[a++])
}else if(A[a] < B[b]){
arr.push(A[a++])
}else{
arr.push(B[b++])
}
}
for (let i = 0;i < m+n; i++) {
A[i] = arr[i]
}
return A
};
结果
解法三(数组方法+排序)
思路
- 直接将两数组合并+排序
- 代码简洁明了,但不一定是面试官希望的
代码
var merge = function(A, m, B, n) {
A.splice(m, n, ...B)
A.sort((a, b) => a - b)
return A
};
结果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)