一、题目
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
例1:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
二、解法
我们先设置一个空字典 d
,然后遍历数组,字典的键存数组的值,字典的值存数组的索引地址,当差在字典 d
的键里时,就返回 [d[sub], i]
, 至于d[sub]
和 i
的顺序,因为当前存在字典里的值都是已经遍历过的,所以在数组中的位置都在 i
前面.
这里我们用字典来存数组的索引与值的原因是,如果我们直接用Python自带的 index()
方法,找到某个值的第一个匹配项的索引位置,时间复杂度为O(n),但是用字典的话,时间复杂度为O(1),更何况 x in nums
的时间复杂度也为O(n)
代码如下:
d= {}
for i in range(len(nums)):
sub = target - nums[i]
if sub in d:
return [d[sub],i]
d[nums[i]]=i
时间 48ms,击败了 94.2%
结语
欢迎关注我的公众号
疯子的Python笔记