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

两段仅一行差异的twoSum代码结果不同,求解析差异原因(编程新手)

两段twoSum代码的差异解析

我写了两段twoSum的代码,看似只差一行(一段用了else,一段没有),但运行结果完全不同。作为编程新手,想搞清楚两者的差异到底在哪。

第一段代码(正确逻辑)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        numMap = {}
        n = len(nums)

        # Build the hash table
        for i in range(n):
            numMap[nums[i]] = i

        # Find the complement
        for i in range(n):
            complement = target - nums[i]
            if complement in numMap and numMap[complement] != i:
                return [i, numMap[complement]]

        return []  # No solution found

第二段代码(存在两处关键错误)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        numMap = {}
        n = len(nums)
        
    for i in range(n):
        numMap[nums[i]] = i

    for i in range (n):
        complement = target - nums[i] 
        if complement in numMap and numMap[complement] != i:
            return[i,numMap[complement]]
        else:
             return []

核心差异解析

  • 缩进错误(最致命的语法问题)
    第二段代码里,用来构建哈希表的for i in range(n):循环没有缩进在twoSum函数内部,导致这段代码根本不会在调用twoSum时执行。函数里的numMap始终是空字典,后续查找补数的逻辑从一开始就失效。

  • else语句的逻辑错误
    就算把缩进问题修复,第二段代码里的else和if绑定,意味着只要第一个元素的补数不满足条件,就会直接返回空列表,完全不会遍历后面的元素。而第一段代码是遍历完所有元素都没找到符合条件的数对,才会返回空列表。

举个例子:如果输入nums=[3,2,4], target=6,正确解是[1,2]。第二段代码会先检查第一个元素3,它的补数是3,虽然在哈希表里,但索引相同(都是0),不满足条件,这时直接触发else返回空,完全不会去检查后面的2和4。而第一段代码会继续遍历到i=1(元素2),找到补数4的索引是2,满足条件后返回正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:42:30