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

为什么我的Two Sum问题代码在输入[3,2,3]时运行失败

问题原因
  • list.index()方法的固有特性:该方法只会返回列表中第一个匹配元素的下标,当列表中存在重复元素(如示例中的两个3)时,无论实际访问的是第0位还是第2位的3,nums.index(3)始终返回0,因此两个3相加的场景会被nums.index(i) != nums.index(j)的判断直接过滤,无法得到正确结果。
  • 逻辑冗余且参数错误:你使用了三重完全没必要的循环,twoSum仅需要两层下标遍历即可实现暴力求解。同时你示例代码中默认target设为9,但[3,2,3]中任意两个元素相加最大值为6,永远无法匹配target,自然不会有返回结果。
  • 下标遍历逻辑错误:你没有直接遍历下标,而是先遍历元素再反查下标,本身就会因为重复元素的存在导致下标获取错误,完全没必要这么做。
修复方案

首先给出暴力解法的修复版本,适合理解逻辑:

def twoSum(nums = [3, 2, 3], target = 6):
    # 直接遍历下标,跳过index()方法避免重复元素的下标获取错误
    for i in range(len(nums)):
        #  j从i+1开始,避免重复匹配同一个元素
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]

print(twoSum())
# 输出结果:[0, 2]

如果需要更高的时间效率,可以使用哈希表存储已遍历元素的下标,时间复杂度优化到O(n):

def twoSum(nums = [3, 2, 3], target = 6):
    # 哈希表存储已遍历元素的值对应的下标
    seen = {}
    for idx, num in enumerate(nums):
        # 计算当前元素需要匹配的补数
        complement = target - num
        if complement in seen:
            return [seen[complement], idx]
        # 存下当前元素的下标,遇到后续重复元素时会覆盖,不影响结果
        seen[num] = idx

print(twoSum())
# 输出结果:[0, 2]

内容的提问来源于stack exchange,提问作者wehguidg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:12:03