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

Python数组两数之和代码报错求助:IndexError索引越界

解决数组两数之和的代码错误与优化方案

错误原因分析

你的代码触发IndexError的核心原因是:当index == lengthArray时,尝试访问array[index]——数组的合法索引范围是0到lengthArray-1,此时的索引已经超出了数组的边界,导致报错。

除此之外,原代码的逻辑也存在混乱:

  • 在嵌套循环中修改index变量,直接打乱了外层循环的遍历逻辑
  • 判断条件错误,没有正确实现“找两个元素相加等于目标值”的逻辑,而是无意义地和array[index]做比较

修正后的暴力解法

如果要保留暴力遍历的思路,以下是修正后的代码,能正确找到符合条件的元素:

array = [0, 5, 3, 6, 7, 2]
target = 13
length_array = len(array)

# 遍历每个元素,寻找后续能和它相加等于target的元素
for i in range(length_array):
    complement = target - array[i]
    # 从i+1开始遍历,避免重复检查和使用同一个元素
    for j in range(i + 1, length_array):
        if array[j] == complement:
            print(f"符合条件的元素:{array[i]} 和 {complement}")
            # 如果只需要第一个结果,可在此处添加 break

代码说明

  • 外层循环遍历数组中的每个元素,计算当前元素对应的补数(complement = target - array[i])
  • 内层循环从当前元素的下一个位置开始遍历,确保不会重复检查同一对元素,也不会使用同一个元素两次
  • 所有索引操作都在合法范围内,不会出现越界问题

高效哈希表解法

暴力解法的时间复杂度是O(n²),对于大数组效率较低。可以用哈希表(Python字典)将时间复杂度优化到O(n):

array = [0, 5, 3, 6, 7, 2]
target = 13
num_index_map = {}

for index, num in enumerate(array):
    complement = target - num
    # 检查补数是否已经在哈希表中
    if complement in num_index_map:
        print(f"符合条件的元素:{num} 和 {complement}")
    # 将当前元素和索引存入哈希表,供后续元素检查使用
    num_index_map[num] = index

代码说明

  • 用字典存储已经遍历过的元素及其索引,每次遍历新元素时,直接检查所需补数是否存在于字典中
  • 只需遍历数组一次,效率远高于暴力解法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:22