黑白梦黑白梦

toggle navtoggle nav
  • 文章
  • 专栏
  • 文章
  • 专栏

LeetCode 中 JavaScript 的 priority-queue

发布于 2021-12-06, 更新于 2023-12-26

目录
库介绍安装使用

使用 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 - b 或 a > 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 算法刷题笔记

记录 JavaScript 刷题时用到的一些语法、代码片段、工具、经验等

©2015-2026 黑白梦 粤ICP备15018165号

联系: heibaimeng@foxmail.com