首页 > 解决方案 > Leetcode 中的二和问题的算法没有输出

问题描述

我编写的旨在解决二和问题的代码:

def twoSum(self, nums: List[int], target: int) -> List[int]:
   
    dict = {}

    for i in range(len(nums)):
        complement = target - nums[i]
        if complement in dict:
            return [dict[complement], i]
        dict[complement] = i

我刚刚开始在 LeetCode 上练习,在解决二和问题时遇到了问题。

问题陈述:

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们加起来等于目标。

您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。

您可以按任何顺序返回答案。

我的推理是创建一个字典并遍历数字,并为每个数字生成一个补数,然后我在字典中查找它,如果它确实存在,那么我返回生成该补数的索引和当前索引一世。否则,我插入带有补码的键。

不知何故,我的函数没有输出任何东西,只有两个空括号。下面是一个示例输入和正确的输出。

Input: nums = [3,2,4], target = 6
Output: [1,2]

标签: pythonsum

解决方案


最后一行是错误的。它应该dict[nums[i]] = i是 ,因为您正在为它们的值存储索引。这是整个函数,它具有更好的变量名,不会影响内置类型:

def twoSum(self, nums, target):
    dct = {}
    for i in range(len(nums)):
        complement = target - nums[i]
        if complement in dct:
            return [dct[complement], i]
        dct[nums[i]] = i

或者更简洁地使用enumerate和存储它们的补码值:

def twoSum(self, nums, target):
    dct = {}
    for i, num in enumerate(nums):
        if num in dct:
            return [dct[num], i]
        dct[target - num] = i

您可能会注意到您混合使用了这两种方法。您在 dct 中寻找补码,并且还想将它存储为当前索引。两者之一需要是当前值。


推荐阅读