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

posted @ 2015-02-18 15:51  clq.lib  阅读(141)  评论(0编辑  收藏  举报