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

如何优化这段JavaScript代码?查找数组中和为8的元素索引

问题分析与代码优化

原代码存在几个关键问题:

  • 循环变量从1开始,混淆了**数组索引(从0开始)**和元素值的概念
  • 错误计算了i + j的和,实际应该是数组对应索引的元素相加:arr[i] + arr[j]
  • 使用arr.indexOf(i)获取索引会导致错误(比如数组有重复值时返回第一个匹配项),且这里的i是循环变量而非数组元素
  • 双重循环会重复遍历相同的元素对(如索引[2,3]和[3,2]会被重复处理),效率较低

优化方案1:优化暴力循环(时间复杂度O(n²))

修正索引逻辑,避免重复检查,直接输出符合条件的索引对:

const arr = [1, 2, 3, 4, 5];
const sum = 8;

// 外层循环从第一个元素到倒数第二个
for (let i = 0; i < arr.length - 1; i++) {
  // 内层循环从i的下一个元素开始,避免重复检查
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] + arr[j] === sum) {
      console.log(`符合条件的索引对:[${i}, ${j}]`);
    }
  }
}

输出结果:

符合条件的索引对:[3, 4]

优化方案2:哈希表法(时间复杂度O(n))

通过哈希表存储元素值与索引的映射,一次遍历即可找到目标,效率更高:

const arr = [1, 2, 3, 4, 5];
const sum = 8;
const map = new Map();

for (let i = 0; i < arr.length; i++) {
  const target = sum - arr[i];
  // 检查哈希表中是否存在目标值,且不是当前元素本身
  if (map.has(target)) {
    console.log(`符合条件的索引对:[${map.get(target)}, ${i}]`);
  }
  // 将当前元素和索引存入哈希表
  map.set(arr[i], i);
}

输出结果:

符合条件的索引对:[3, 4]

内容的提问来源于stack exchange,提问作者Jenish R. Chanchad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:20:12