Two Sum *

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表,来减少查找的时间

原文地址:https://www.cnblogs.com/iois/p/4295807.html