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

LeetCode两数之和(TwoSum)解决方案报错:索引越界问题排查

问题分析与修复

核心错误原因

你的代码触发「索引越界」的根本问题是混淆了数组元素值与索引,再加上循环逻辑混乱,具体问题拆解如下:

1. 循环遍历的是元素值而非索引

for x in nums 和 for y in nums 这两个循环,遍历的是数组中的元素值,不是元素的索引。比如示例输入nums = [2,7,11,15],x会依次取2、7、11、15,当你执行nums[x]时,相当于用元素值作为索引访问数组——比如x=7时,数组最大索引仅为3,直接触发索引越界。

2. 手动递增循环变量完全多余

for循环本身会自动完成迭代,你在循环内部手动执行x+=1和y+=1属于画蛇添足,会让x、y的值彻底混乱,进一步加剧索引越界的概率。

3. 空列表直接赋值索引会触发额外错误

你初始化了空列表solutions = [],之后直接执行solutions[0] = x,这会因为列表中没有索引0对应的元素,触发另一次索引越界(当前报错在第8行,这个问题是后续会暴露的)。

4. 可能重复使用同一个元素

代码没有限制两个索引不能相同,比如如果nums里有一个2、target=4,代码会返回同一个索引两次,不符合题目隐含的「不能使用同一个元素两次」的要求。


修复后的代码

以下是修正了上述问题的两种实现:

基础双重索引循环版本(易理解)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, n):  # 从i+1开始,避免重复检查和使用同一元素
                if nums[i] + nums[j] == target:
                    return [i, j]
        return []  # 题目保证有解,此处为兜底逻辑

哈希表优化版本(时间复杂度O(n))

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num_map = {}  # 存储元素值到索引的映射
        for idx, num in enumerate(nums):
            complement = target - num
            if complement in num_map:
                return [num_map[complement], idx]
            num_map[num] = idx
        return []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:55:11