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

如何优化实现两数之和功能的JavaScript代码,使其更高效简洁?

两数之和实现方案优化

原有代码存在的问题

先梳理下你当前写法的缺陷,后续优化可以避开这些问题:

  • let copyArray = arr是引用赋值,没有拷贝原数组,执行pop会直接修改传入的原数组,产生意料之外的副作用
  • 补数计算逻辑错误,不需要加Math.abs,你要找的是和当前值相加等于target的数,正确补数应为target - 当前值,加绝对值会导致正负值的补数逻辑完全错误
  • pop方法不需要传参,永远删除数组最后一位,你传入的copyArray[i]完全无效,循环会漏查大量元素
  • 多次调用includes、indexOf都是O(n)查询,整体算法时间复杂度为O(n²),数组长度较大时性能极差

更实用的高性能方案(推荐)

这是工业界通用的标准解法,用哈希表做空间换时间,时间复杂度降到O(n),无副作用,适配所有场景:

function targetSum(arr, target) {
  const numMap = new Map();
  for (let i = 0; i < arr.length; i++) {
    const complement = target - arr[i];
    if (numMap.has(complement)) {
      return [complement, arr[i]];
    }
    numMap.set(arr[i], i);
  }
  return [];
}

特点:一次遍历即可得到结果,处理万级以上长度的数组效率比原写法高数十倍,不会修改原数组

基于内置方法的精简代码版本

如果追求代码简洁,小数据量场景下可以用find+slice的内置方法组合压缩代码行数:

const targetSum = (arr, target) => {
  const match = arr.find((val, idx) => arr.slice(idx + 1).includes(target - val));
  return match ? [match, target - match] : [];
};

特点:仅3行代码,逻辑直观,不需要额外维护变量,适合快速实现的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:10