本地Node.js运行LeetCode代码报MaxPriorityQueue未定义咨询
本地运行LeetCode优先队列相关代码报错原因
核心原因
- LeetCode的JavaScript判题运行环境提前全局注入了第三方优先队列实现,
MaxPriorityQueue、MinPriorityQueue都是注入的全局构造函数,不需要用户手动引入、手动实现,所以相同代码在平台内可以正常运行。 - 你本地安装的原生Node.js是标准运行环境,既没有内置这个优先队列类,也没有做对应的全局注入,全局作用域下找不到
MaxPriorityQueue的定义,自然会抛出引用错误。 - 你查官方文档找不到对应说明是正常的:
MaxPriorityQueue从来不是JavaScript标准库的内容,不属于ECMAScript规范定义的内置对象,只是LeetCode平台额外加的解题便利工具。
本地运行的两种可行方案
- 方案一:手动实现最大优先队列类,不依赖任何第三方库。这也是算法练习场景下最通用的方案,写完类定义之后再写解题逻辑,在任何支持JavaScript的环境都能跑。
- 方案二:本地安装对应依赖包,手动引入后使用,和LeetCode环境的API保持完全一致:
- 进入你的项目目录,执行安装命令:
npm install @datastructures-js/priority-queue- 在代码头部加一行引入语句,再写原有解题逻辑即可:
const { MaxPriorityQueue } = require('@datastructures-js/priority-queue') var lastStoneWeight = function(stones) { const m = new MaxPriorityQueue() for(const w of stones) m.enqueue(w) while(m.size() > 1){ const diff = m.dequeue().element - m.dequeue().element if(diff > 0) m.enqueue(diff) } return m.size() === 0 ? 0 : m.front().element };
注意:不止JavaScript环境,LeetCode给所有支持的编程语言都预置了不少解题常用的工具类、第三方库,这些内容都不属于对应语言的标准库,把平台上能跑的代码直接拿到本地运行前,要先确认有没有依赖平台预置的非标准内容。
内容的提问来源于stack exchange,提问作者Mossy82
相关产品推荐
相关产品推荐

