14.队列合并排序|刷题打卡
create by db on 2021-4-11 14:43:44
Recently revised in 2021-4-11 15:37:56
闲时要有吃紧的心思,忙时要有悠闲的趣味
- 掘金团队号上线,助你 Offer 临门! 点击 查看详情
题目描述
多个队列,分别是从小到大排序。实现一个方程,把所有队列合并成一个从大到小排序的新队列
示例 1:
输入:
let que1 = [1, 3, 20]
let que2 = [2, 15, 16]
let que3 = [1, 6, 32]
输出: [32,20,16,15,6,3,2,1,1]
思路分析
队列(queue)是一种先进先出(First in First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
JavaScript中并没有队列这一数据结构,那我们就使用数组[]来模拟队列。
不过多个队列元素的遍历比较需要判断很多条件,因此我们就拆分成两个方法。
- 首先我们实现两个队列的合并
- 然后循环所有参数队列,使用第一个方法,将所有的队列合并到一块
- 最后排序并返回新队列
AC 代码
/**
* @param {number[]} que1
* @param {number[]} que2
* @return {number[]}
*/
// 合并两个队列
function mergeQue(que1, que2) {
// 声明新队列
let sorted = []
// 创建指针
let i = 0
let j = 0
// 循环遍历,因为传入参数本来就是从小到大排序,所以我们只需要比较当前的大小就行
while (i < que1.length || j < que2.length) {
if (i == que1.length || (j != que2.length && que1[i] > que2[j])) {
// 当que1的元素比que2小时,取que2[j]并且j指针后移
sorted.push(que2[j])
++j
} else {
sorted.push(que1[i]);
++i
}
}
// 返回合并后的数组,同样时从小到大排列的
return sorted;
}
// 合并所有队列并排序
function mergeAndSortQue(...args) {
let arr = args[0]
for (let i = 1; i < args.length; i++) {
// 循环合并所有参数
arr = mergeQue(arr, args[i])
}
// 因为当前是从小到大排列,反转数组就好
return arr.reverse()
}
测试:
let newQue = mergeAndSortQue(que1, que2, que3)
console.log(newQue)
总结
四月,芳菲未尽,鲜花盛开。加油!
后记:Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富文章的动力!GitHub 地址
文档协议
db 的文档库 由 db 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于github.com/danygitgit上的作品创作。
本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。