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

Python两数求和代码中for循环未逐次迭代问题求助

两数之和代码问题分析与修复

你的代码存在的核心问题

  • 你遍历的是列表元素值而非索引,且nums.index(x)方法只会返回第一个匹配元素的索引,如果列表中有重复元素,会直接导致索引获取错误,错过正确的组合。
  • 内层循环没有跳过外层当前元素的位置,同时依赖index()判断索引不等的逻辑不可靠,比如当列表中有重复值时,两个不同位置的相同元素会被判定为索引相等,直接过滤掉正确解。
  • 若遍历完所有组合都未找到符合条件的(比如上述逻辑错误导致正确组合被排除),函数没有返回值,不符合题目要求。

修正后的基础版本(双循环)

改用索引遍历,直接获取元素的真实位置,同时内层循环从外层索引+1开始,避免重复检查和自加情况:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        # 遍历每个元素的索引i
        for i in range(n):
            # 从i+1开始遍历,避免重复检查同一组元素
            for j in range(i + 1, n):
                if nums[i] + nums[j] == target:
                    return [i, j]
        # 题目保证存在有效解,此处兜底返回空列表
        return []

更高效的优化版本(哈希表)

如果想把时间复杂度从O(n²)降到O(n),可以用哈希表存储已遍历元素的索引,每次计算目标值与当前元素的差值,检查差值是否在哈希表中:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num_map = {}
        # 同时获取索引和元素值
        for idx, num in enumerate(nums):
            complement = target - num
            # 如果差值已在哈希表中,直接返回对应的索引对
            if complement in num_map:
                return [num_map[complement], idx]
            # 否则将当前元素和索引存入哈希表
            num_map[num] = idx
        return []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:47:53