两数之和数组暴力解法问题:我的JavaScript代码哪里出错了?
两数之和暴力解法的问题分析与修复
核心问题点
错误的相同元素处理分支
当找到满足和为target的两个元素时,你额外添加了判断:若两个元素值相等,就将i自增1后返回。这完全是多余操作,直接导致了测试用例[3,3]的错误输出——当index=0,i=1时,明明已经找到正确的索引对,却因为这个分支把i改成了2,返回了超出数组范围的索引。内层循环初始化错误
每次外层循环的index递增后,你把i重置为0,这会导致:
- 重复检查已经配对过的元素组合(比如
index=1时,i=0会再次检查nums[1]+nums[0],和之前index=0,i=1的检查重复) - 可能出现
index === i的自我配对情况(不符合题目“两个不同索引”的要求)
正确的内层循环初始化应该是i = index + 1,只遍历index之后的元素,避免重复和无效检查。
修复后的代码
var twoSum = function(nums, target) { let index = 0; while (index <= nums.length - 1) { let i = index + 1; while (i <= nums.length - 1) { if (nums[index] + nums[i] === target) { return [index, i]; } i++; } index++; } }; console.log(twoSum([3, 3], 6)); // 输出 [0, 1]
修复说明
- 移除了多余的相同元素判断分支,找到符合条件的索引对直接返回,避免错误修改索引值
- 内层循环从
index + 1开始,确保只检查当前index之后的元素,既避免重复计算,也保证不会出现自我配对的情况
内容的提问来源于stack exchange,提问作者Karen
相关产品推荐
相关产品推荐

