Given an array of integers, find two numbers such that they add up to a specific target number.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2 (2+7=9)
这个问题想了很久,一直没想出来,参考了别人的代码才知道可以这样做,没接触过这类问题,要牢记
最一般的方法是用一个循环套一个循环,时间代价(O(n^2))
用hash表记住已经查过的数字,这样后面找 target-num[i] 就不用再循环一遍了
hash表查表代价(O(1)),所以总的时间代价(O(n))
以下为python代码
class Solution:
# @return a tuple, (index1, index2)
def twoSum(self, num, target):
dict={}
for i in range(len(num)):
if (target-num[i]) in dict:
#dict.get(target-num[i]) #不对???
return [dict[target-num[i]]+1,i+1]
else:
dict[num[i]]=i
使用hash表,来减少查找的时间