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

