LeetCode 中 JavaScript 的 priority-queue

使用 JavaScript 刷题,最大的缺陷就是没有优先队列/堆这个数据结构。不过,LeetCode 引入了 datastructures-js/priority-queue 库,可以使用。

库介绍

LeetCode 编辑器语言选择 JavaScript,它旁边有提示图标,点击看到,如需使用优先队列,可使用 datastructures-js/priority-queue@5.3.0

这个库实现了最大堆、最小堆,以及自行指定优先规则回调的优先队列。

安装

https://www.npmjs.com/package/@datastructures-js/priority-queue

npm i -D @datastructures-js/priority-queue@5.3.0

安装后就可以本地调试了,本地需要从库中引入类。因为该库支持 TS,在编辑器中会有较好的提示。

使用方法: https://github.com/datastructures-js/priority-queue/tree/v5.3.0

使用

在答题时,使用时,不需要引入,直接用即可。

提供类: PriorityQueue

构造函数:传入对象,通过 compare 对象传入比较函数。

如创建大根堆与小根堆,其中 compare 与 sort 的一样,传入 a - ba > b ? 1 : -1 是从小到大,为小根堆,反之 b - a 为大根堆:

const pq = new PriorityQueue({compare: (a, b) => a - b}) // 小根堆
const pq = new PriorityQueue({compare: (a, b) => b - a}) // 大根堆

常用方法:

  • enqueue(x) 入队 / dequeue() 出队并返回元素
  • size() 返回长度
  • front() 返回优先级最高的元素
  • clear() 清空

尝试使用其处理堆的经典题目, leetcode 215. 数组中的第K个最大元素:

var findKthLargest = function (nums, k) {
    const pq = new PriorityQueue({compare: (a, b) => a - b})
    for (let i = 0; i < nums.length; i++) {
        pq.enqueue(nums[i])
        if (pq.size() > k) pq.dequeue()
    }

    return pq.front()
};
本文收录于专栏
记录 JavaScript 刷题时用到的一些语法、代码片段、工具、经验等