LeetCode JS环境调用MaxPriorityQueue.fromArray报非函数错误
问题描述
根据LeetCode官方发布的各编程语言运行环境支持说明,平台已内置@datastructures-js/priority-queue优先队列库。参照该库官方文档中fromArray方法的使用指引、对照官方提供的示例编写代码时,执行以下代码抛出类型错误:
const maxHeap = MaxPriorityQueue.fromArray(nums);
抛出的错误信息如下:
Line 11 in solution.js const maxHeap = MaxPriorityQueue.fromArray(nums); ^ TypeError: MaxPriorityQueue.fromArray is not a function Line 11: Char 36 in solution.js (findKthLargest) Line 34: Char 19 in solution.js (Object.<anonymous>) Line 16: Char 8 in runner.js (Object.runner) Line 23: Char 26 in solution.js (Object.<anonymous>) at Module._compile (node:internal/modules/cjs/loader:1101:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47
代码写法完全匹配官方示例要求,需要确认报错触发原因以及正确的调用方式。
报错原因
核心原因是LeetCode平台内置的@datastructures-js/priority-queue版本过低:
fromArray是该库v6.0.0及以上版本才新增的静态类方法- LeetCode当前Node.js运行环境中预装的该库版本为v5.x及更早的稳定版,版本中未实现
fromArray接口,因此调用时会抛出「不是函数」的类型错误。
解决方案
你可以选择以下两种适配LeetCode运行环境的写法:
方案1:遍历数组逐个入堆(兼容所有版本,最通用)
不需要依赖静态方法,实例化优先队列后遍历目标数组,逐个调用enqueue方法插入元素即可,示例:
const maxHeap = new MaxPriorityQueue(); nums.forEach(num => maxHeap.enqueue(num));
如果是需要自定义优先级的场景,在实例化时传入优先级配置即可,例如:
// 自定义优先级:数值越大优先级越高 const maxHeap = new MaxPriorityQueue({ priority: val => val }); nums.forEach(num => maxHeap.enqueue(num));
方案2:手动实现堆化逻辑(性能最优,适合大数据量场景)
如果数组长度较大,逐个入堆的O(nlogn)时间开销较高,可以自己实现O(n)时间复杂度的堆初始化逻辑,直接传入数组构造堆结构。
注意:不要尝试在LeetCode中手动安装高版本依赖,平台运行环境不支持用户自行安装npm包,所有可用依赖均为预装版本。
内容的提问来源于stack exchange,提问作者Omkar Kulkarni
相关产品推荐
相关产品推荐

