我在Leetcode上的python中进行练习问题(仍在学习中)。这就是问题: 给定一个整数数组,返回两个数字的索引,以便它们加起来成为一个特定的目标。
您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
示例:
给出数字= [2,7,11,15],目标= 9,
因为nums [0] + nums [1] = 2 + 7 = 9, 返回[0,1]。
我的代码是
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dict = {}
for counter, i in enumerate(nums):
a = target- i
if a in dict:
return (dict[a], counter)
dict[i] = counter
它可以正常运行并通过所有测试,但是我发现这样做的普遍原因是dict = {} 使用该词典的原因是什么,以及该代码如何识别(3,3)target = 6的情况,其中重复和索引很重要。基本了解代码为何有效!
答案 0 :(得分:0)
字典将列表中的数字作为索引存储为键。
例如:
While
永远不会插入重复项,如果相同的数字出现两次,则索引将被出现的新索引替换。
答案 1 :(得分:0)
对于重复项,重要的是测试第一个列表上的所有值,并将索引存储在单独的字典上,以确保您永远不会在字典中测试实际测试的值。
使用字典来查找正确数字的索引,就不能存储重复项。 因为在字典中您不能有两个具有相同键的值,所以如果有重复键,则只需用新的键更改旧的索引。
例如,如果dict == {'3': 0, '2':1}
的测试值为2,则dict == {'3': 0, '2':2}
。
如果目标通过重复编号到达(例如目标2+2
的{{1}}),则4
中不会存储任何导致返回的原因