两数之和(Two Sum)问题始终返回空数组,求JavaScript解决方案
两数之和(Two Sum)正确JavaScript实现
原代码的核心错误是将补数而非当前遍历的数值存入哈希表,导致无法正确匹配之前出现的目标数值,因此始终返回空数组。
正确实现代码
function twoSum(nums, target) { const map = {}; for (let i = 0; i < nums.length; i++) { const comp = target - nums[i]; // 检查哈希表中是否存在当前数值的补数 if (map[comp] !== undefined) { return [map[comp], i]; } // 将当前数值和对应的索引存入哈希表,供后续元素匹配 map[nums[i]] = i; } // 遍历完未找到符合条件的两个数,返回空数组 return []; } console.log(twoSum([2, 7, 11, 15], 9)); // 输出 [0, 1]
逻辑说明
- 哈希表
map用于记录已遍历数值的索引,实现O(1)时间复杂度的查找 - 遍历每个元素时,先计算需要匹配的补数,再检查哈希表中是否存在该补数
- 若存在则直接返回结果,不存在则将当前数值存入哈希表,继续遍历
内容的提问来源于stack exchange,提问作者The dumb coder
相关产品推荐
相关产品推荐

