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

Node.js中如何使用Map实现判断数组两数之和等于k

代码问题修正方案

原代码错误点

  • 错误使用下标访问 Map 结构:Map 不是普通数组,addInput[i] 写法永远返回 undefined,直接导致内层所有判断逻辑都不会生效
  • 遍历逻辑冗余:外层遍历 Map 值、内层循环 Map 长度的写法会出现重复匹配的问题,也没有做自身相加的校验(比如存在数值为k/2的项时,会错误判定自己加自己符合要求)
  • 没有匹配终止逻辑,也没有返回最终的布尔结果

符合要求的 Map 实现代码

const arr = [{ key1: 10 }, { key2: 5 }, { key3: 7 }, { key4: 17 }];
const k = 17;
// 构建Map:键为数字值,值为对应原对象的键,用于区分不同元素
const numMap = new Map(arr.flatMap(item => {
  const [objKey, num] = Object.entries(item)[0];
  return [[num, objKey]];
}));
let result = false;

for (const [currentNum, currentKey] of numMap.entries()) {
  // 计算需要匹配的差值
  const targetDiff = k - currentNum;
  // 差值存在 且 差值对应的元素不是当前元素,避免自身相加
  if (numMap.has(targetDiff) && numMap.get(targetDiff) !== currentKey) {
    console.log(`${currentNum} + ${targetDiff} = ${k} (true)`);
    result = true;
    // 找到匹配直接终止,提升性能
    break;
  }
}

console.log('是否存在符合条件的组合:', result); // 输出 true

逻辑说明

  • 利用 Map has() 方法的O(1)查找效率,整体时间复杂度仅为O(n),比双重循环性能更高
  • 新增元素唯一标识校验,排除自身相加的错误情况
  • 匹配到符合条件的组合后直接终止遍历,不需要处理剩余元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:08