两数之和代码结果不符预期:预期[1,2]却返回[1,1]求排查
两数之和索引问题排查
给定数字列表 nums = [2,5,5,11] 和目标值 target = 10,需求是找出和为目标值的两个数并返回它们的数组索引。预期返回结果为 [1,2],但运行以下代码后实际得到 [1,1]:
nums = [2,5,5,11] target = 10 def nums_sum_target(nums, target): for i in range(len(nums)): for j in range(len(nums)): if j == len(nums) - 1: target_sum = nums[i] else: print(j+1, "inner loop 2") target_sum = nums[i] + nums[j+1] if target_sum == target: print([nums[i], nums[j+1]]) return [i, j+1]
问题原因分析
- 内层循环逻辑错误:内层循环
j遍历整个数组长度,且未限制第二个数的索引不能等于i。当i=1(对应数值5)时,j=0会取j+1=1,此时计算的是nums[1] + nums[1](5+5=10),刚好匹配目标值,导致提前返回错误的索引[1,1]。 - 多余的单元素判断分支:
if j == len(nums) - 1分支会将单个元素的值赋值给target_sum,这完全不符合“两数之和”的需求,属于无效逻辑,还可能引发错误判断。
修正方案
方案1:优化双重循环
让内层循环从i+1开始,避免重复检查同一元素或已遍历过的组合:
nums = [2,5,5,11] target = 10 def nums_sum_target(nums, target): for i in range(len(nums)): # 内层循环从i的下一个索引开始,确保两个数是不同位置的元素 for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j] print(nums_sum_target(nums, target)) # 输出:[1,2]
方案2:哈希表优化(时间复杂度O(n))
通过哈希表存储已遍历元素的索引,一次遍历即可找到结果,效率更高:
nums = [2,5,5,11] target = 10 def nums_sum_target(nums, target): num_index_map = {} for index, num in enumerate(nums): # 计算当前元素的补数(目标值减当前元素) complement = target - num if complement in num_index_map: # 补数已存在,返回补数索引和当前索引 return [num_index_map[complement], index] # 存储当前元素及其索引 num_index_map[num] = index print(nums_sum_target(nums, target)) # 输出:[1,2]
内容的提问来源于stack exchange,提问作者Joboa
相关产品推荐
相关产品推荐

