You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:06:25