JavaScript两数之和问题:重复元素导致索引返回错误求助
解决两数之和函数中重复元素的索引错误问题
你的代码核心问题是误用了indexOf()方法:这个方法会返回数组中第一个匹配目标元素的索引,所以当数组里有重复的1时,第二个1的indexOf结果还是0,导致返回[0,0]。但实际上你的嵌套循环已经正确找到了符合条件的索引i=0和j=1,直接返回这两个变量就能得到正确结果。
修正后的嵌套循环版本
let arr = [1,1,8,9,7,22,6] var twoSum = function(nums, target) { // 用let声明循环变量,避免污染全局作用域 for(let i = 0; i < nums.length; i++){ for(let j = i + 1; j < nums.length; j++){ if(nums[i] + nums[j] === target){ // 直接返回当前遍历到的索引i和j return [i, j]; } } } }; console.log(twoSum(arr, 2)) // 输出 [0,1]
优化版(哈希表实现,时间复杂度O(n))
嵌套循环的时间复杂度是O(n²),如果数组规模较大,效率会很低。可以用哈希表(Map)来优化,遍历一次数组就能完成查找:
let arr = [1,1,8,9,7,22,6] var twoSum = function(nums, target) { const map = new Map(); for(let i = 0; i < nums.length; i++){ // 计算当前元素的补数(目标值减当前元素) const complement = target - nums[i]; // 如果补数已经在哈希表里,直接返回对应的索引对 if(map.has(complement)){ return [map.get(complement), i]; } // 把当前元素和索引存入哈希表 map.set(nums[i], i); } }; console.log(twoSum(arr, 2)) // 输出 [0,1]
内容的提问来源于stack exchange,提问作者Ankit kharola
相关产品推荐
相关产品推荐

