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
相关产品推荐
相关产品推荐

