MaxPriorityQueue 未定义

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)