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

含重复元素的长度为2列表为何在该两数和嵌套for循环代码中失效

LeetCode两数和代码重复值用例失效排查

问题根因

代码bug的核心原因是对Python列表index()方法的特性理解错误:

列表的index(传入值)方法只会返回列表中第一个与传入值相等的元素下标,和当前遍历到的是哪个位置的元素没有关联。

第三组测试用例执行逻辑问题

针对nums = [3,3], target = 6的测试用例,代码执行全程无法进入结果判断分支:

  • 外层循环遍历值x时:无论当前取到的是下标0的3还是下标1的3,调用nums.index(x)永远返回0——因为列表中第一个值为3的元素固定在下标0位置
  • 内层循环遍历值y时:同理,无论当前取到哪个位置的3,调用nums.index(y)也永远返回0
  • 前置判断条件nums.index(x) != nums.index(y)等价于判断0 != 0,结果永远为假,后续求和、返回结果的逻辑完全不会被触发,两层循环跑完没有命中任何return语句,最终返回空列表。

额外问题说明

这个写法即使能通过前两组无重复值的测试用例,也存在设计缺陷:每次遍历都调用index()反查下标会带来额外的时间开销,只要数组中存在重复值就可能出现下标判断错误,并非只有长度为2的重复值场景会失效。

嵌套循环写法修正参考

直接遍历下标而非遍历元素值,从根源上避免“靠值反查下标”的逻辑漏洞;同时内层循环从外层下标+1的位置开始遍历,天然满足“不重复使用同一个元素”的题目要求,也能减少无效循环:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        arr_length = len(nums)
        for i in range(arr_length):
            # 从i的下一位开始匹配,避免选到同一个元素,也不需要重复判断之前的组合
            for j in range(i + 1, arr_length):
                if nums[i] + nums[j] == target:
                    return [i, j]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:18:21