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

LeetCode JavaScript 219.存在重复元素II 超时问题排查

超时原因分析

console.log触发超时的核心原因是它带来的额外开销远大于循环内的运算本身,具体如下:

  • JS引擎执行数值比较、算术运算的速度极快,但console.log是同步IO操作:每次调用都要完成参数序列化、写入标准输出流、对接判题环境的日志收集模块,单次执行耗时是普通数值运算的数百到上千倍。
  • 你的双重循环时间复杂度是O(n²),当测试用例是长度上万的无重复数组时,循环总执行次数会达到千万甚至亿级。没有打印语句时,纯计算逻辑刚好能卡在判题时间阈值内跑完;每轮循环加一次console.log,总耗时会直接暴涨几十上百倍,必然触发时间超限。

你本地跑三个示例时数组长度最多只有6,循环总次数不到15次,打印的开销完全感知不到,但遇到大数据量边界用例时,这部分开销会被平方级放大。

额外提一句,即使去掉打印语句,这套双重循环逻辑遇到长度10万级别的数组还是会超时,更优的实现是用哈希表存储元素上次出现的索引,把时间复杂度降到O(n),参考代码:

var containsNearbyDuplicate = function(nums, k) {
    const lastPos = new Map();
    for (let i = 0; i < nums.length; i++) {
        const cur = nums[i];
        if (lastPos.has(cur) && i - lastPos.get(cur) <= k) {
            return true;
        }
        lastPos.set(cur, i);
    }
    return false;
};

内容的提问来源于stack exchange,提问作者ccc6

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:46:01