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

两数之和代码结果不符预期:预期[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:57