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

LeetCode 1.两数之和:Python代码在target=10时无正确结果求解

问题分析与解决方案

核心问题原因

你的代码在target=10时失效,本质是循环中直接修改原数组+引用复用导致遍历逻辑彻底混乱:

  • list = array并没有创建新数组,只是让list指向原数组的内存地址,所以list.remove(n)实际是在修改原array。
  • 外层for n in array循环依赖数组的迭代器,但循环过程中原数组不断被移除元素,迭代器的遍历顺序被打乱:
    当target=10时,初始数组是[1,6,3,4]:
    1. 第一次循环取n=1,执行remove(1)后原数组变成[6,3,4],内层循环找不到1和其他数的和为10,循环结束。
    2. 外层循环继续迭代时,迭代器会跳过6(因为原数组长度变化,迭代器指针位置错位),直接取到3。
    3. 处理n=3时移除3,数组变成[6,4],内层循环找不到和为10的数。
    4. 最后迭代到4,移除4后数组只剩[6],依然找不到结果,最终无输出。

此外,你的代码还偏离了题目要求:题目需要返回索引,但你只输出了数值;且找到结果后再次移除元素的操作完全多余,只会加剧数组的混乱。

修正方案

方案1:哈希表法(最优,时间复杂度O(n))

用哈希表存储已遍历元素的索引,每次计算当前元素的补数(target - 当前元素),如果补数在哈希表中,直接返回对应的两个索引:

def twosum(nums, target):
    num_index_map = {}
    for idx, num in enumerate(nums):
        complement = target - num
        if complement in num_index_map:
            return [num_index_map[complement], idx]
        num_index_map[num] = idx

# 测试示例
array = [1,6,3,4]
target = 10
print(twosum(array, target))  # 输出 [1, 3],对应6和4的索引

方案2:双重索引循环(直观,时间复杂度O(n²))

通过索引遍历,避免修改原数组,确保每个元素只和后面的元素配对:

def twosum(nums, target):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]

# 测试示例
array = [1,6,3,4]
target = 10
print(twosum(array, target))  # 输出 [1, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:25