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

如何编写优化的JavaScript findSum函数返回数组加和为指定值的两个元素

JavaScript两数之和查询函数优化方案

你当前实现的双层循环方案时间复杂度为O(n²),仅适合小数据量场景,我们可以通过哈希表存储已遍历元素的方式,将时间复杂度压缩到O(n),属于典型的空间换时间优化思路。

优化思路

  • 遍历数组时,对每个元素计算「目标和与当前元素的差值」,该差值就是我们需要找的配对元素
  • 检查差值是否已经存在于哈希表中,存在则直接返回两个配对值
  • 不存在则将当前元素存入哈希表,继续遍历下一个元素

优化后代码

function findSum(arr, sum) {
  // 哈希表存储已遍历过的元素
  const visitedNums = new Map();
  for (const currentNum of arr) {
    const matchNum = sum - currentNum;
    // 找到匹配值直接返回结果
    if (visitedNums.has(matchNum)) {
      return { first_element: matchNum, innerElement: currentNum };
    }
    // 未找到则将当前值存入哈希表
    visitedNums.set(currentNum, true);
  }
  // 无匹配结果时返回null,可按需调整返回值
  return null;
}

性能对比

  • 时间复杂度:O(n),仅遍历数组1次,哈希表的查找、插入操作平均复杂度为O(1)
  • 空间复杂度:O(n),最坏情况下需要存储整个数组的所有元素,适合中大数据量场景使用

补充说明

你原代码中innerElement !== first_element的判断会过滤掉值相同、索引不同的合法配对(比如输入findSum([2,2],4)时,原代码会返回undefined)。如果你的需求允许使用值相同但索引不同的两个元素,上述优化后的代码已经兼容该场景;如果确实需要严格禁止值相同的元素配对,可在返回前加一层值判断即可。

内容的提问来源于stack exchange,提问作者N.SH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:04