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

不使用哈希表查找数组首个重复元素,现有JS代码返回结果错误如何修复

问题原因分析

原代码的双重循环逻辑是从第i个元素出发,查找它之后所有位置是否存在相等元素,会优先返回数组中最早出现的、存在后续重复值的元素,而不是最早发生重复的配对中的元素。
以示例输入[2,5,5,2,3,5,1,2,4]为例,原代码会先匹配到索引0的2和索引3的2,直接返回2,但实际上索引1的5和索引2的5是更早出现的重复配对,因此原逻辑不符合需求。

修正方案(推荐)

使用哈希集合记录已出现的元素,单次遍历即可得到结果,时间复杂度为O(n),远优于原双重循环的O(n²):

function firstRecurring(input) {
  // 存储已经遍历过的元素
  const seen = new Set();
  for (let i = 0; i < input.length; i++) {
    const current = input[i];
    // 当前元素已出现过,就是首个重复元素,直接返回
    if (seen.has(current)) {
      return current;
    }
    // 未出现过则加入集合
    seen.add(current);
  }
  // 遍历完无重复返回undefined
  return undefined;
}

console.log(firstRecurring([2,5,5,2,3,5,1,2,4])); // 输出5,符合预期

可选调整:保留双重循环写法(不推荐,性能较差)

如果必须保留双重循环的结构,可调整遍历顺序,每次检查当前位置元素和它之前的所有元素是否重复,也能得到正确结果:

function firstRecurring(input) {
  for (let j = 1; j < input.length; j++) {
    // 检查j位置的元素在它之前的区间是否有重复
    for (let i = 0; i < j; i++) {
      if(input[i] === input[j]) {
        return input[j];
      }
    }
  }
  return undefined
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:24:01