Mos*_*y82 6 javascript priority-queue
我正在经历一些让我困惑的事情。
在解决 leetcode 上的 javascript 问题时,我遇到了一个在解决方案中实现 MaxPriorityQueue 的解决方案。
发布的解决方案是:
Finally, there's a Max/MinPriorityQueue for JavaScript!
add -> enqueue( )
remove -> dequeue( )
highest number (peek) -> front( )
.element -> actual value
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
};
Run Code Online (Sandbox Code Playgroud)
我尝试在自己的环境中自己实现这一点并得到:
const m = new MaxPriorityQueue();
^
ReferenceError: MaxPriorityQueue is not defined
at lastStoneWeight (C:\Users\steph\Desktop\coding-projects\learning-js\leetcode\last-stone-weight.js:55:13)
at Object.<anonymous> (C:\Users\steph\Desktop\coding-projects\learning-js\leetcode\last-stone-weight.js:66:13)
Run Code Online (Sandbox Code Playgroud)
我将相同的代码插入 leetcode,它运行顺利。
我尝试查找有关 MaxPriorityQueue 对象的文档,但使用 MPQ 的任何内容都是从头开始实现的。
如果有人可以解释为什么这不能在我的个人环境(nodejs、VSCode)中运行,我将不胜感激。
小智 7
这是因为你@datastructures-js/priority-queue在 JS 运行时默认导入了库。提到了https://support.leetcode.com/hc/en-us/articles/360011833974-What-are-the-environments-for-the-programming-languages-。
在您自己的运行时,您必须将其导入为
const {
PriorityQueue,
MinPriorityQueue,
MaxPriorityQueue,
} = require('@datastructures-js/priority-queue');
Run Code Online (Sandbox Code Playgroud)
或者
import {
PriorityQueue,
MinPriorityQueue,
MaxPriorityQueue,
ICompare,
IGetCompareValue,
} from '@datastructures-js/priority-queue';
Run Code Online (Sandbox Code Playgroud)