题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
题解
使用查找表的方法,哈希表,时间复杂度O(n)
有坑如下:如果将nums中的所有元素放入map中.
for i,v in enumerate(nums):
dict[v]=i
这样的写法有问题,因为在数组中nums[i]又可能是重复的,后面的就会覆盖掉前面的.如nums=[2,7,2,5]
究其原因是我们把所有的元素都放入了map中,这完全没有必要.我们可以在遍历过程中,当遍历到元素v时,我们只查找v前面的元素.即只将v前的放入查找表.
如上填坑
#使用查找表,哈希实现O(n)
dict = {}
res=[]
for i,key in enumerate(nums):
another_num = target-key
if another_num in dict:
return [dict[another_num],i]
dict[key]=i