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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:06:14