14.队列合并排序|刷题打卡

552 阅读2分钟

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中并没有队列这一数据结构,那我们就使用数组[]来模拟队列。

 不过多个队列元素的遍历比较需要判断很多条件,因此我们就拆分成两个方法。

  1. 首先我们实现两个队列的合并
  2. 然后循环所有参数队列,使用第一个方法,将所有的队列合并到一块
  3. 最后排序并返回新队列

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… 处获得。