python - 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]
解决方案
最后一行是错误的。它应该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 中寻找补码,并且还想将它存储为当前索引。两者之一需要是当前值。
推荐阅读
- c# - 每次检索存储的 OutOfProc 的 HttpContext.Current.Session 对象都会调用数据库吗?
- c++ - 在 C++ 中,为什么使用静态类函数而不是常规函数?
- javascript - 客户端从服务器接收数据
- python - 尝试创建一个视图以将 booleanfield 设置为 true 但不更新
- html - 水平和垂直滚动在 Safari 中很时髦
- ocaml - 是否真的有必要在模块的 sig 和 struct 部分中编写类型定义以使其非抽象?
- json - 在 Phaser3 中从 Multiatlas 加载文件时出错
- php - PHP构建动态WHERE过滤掉列名
- node.js - useEffect 和 useState 不断重新渲染
- javascript - 导航栏的下拉列表