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
相关产品推荐
相关产品推荐

