#title : Two Sum #Given an array of integers, find two numbers such #that they add up to a specific target number. #The function two Sum should return indices of the #two numbers such that they add up to the target, #where index1 must be less than index2. Please note #that your returned answers (bothindex1 and index2) #are not zero-based. #You may assume that each input would have exactly #one solution. #Input: numbers={2, 7, 11, 15}, target=9 #Output: index1=1, index2=2 # First method O(n^2) #easy but Time Limit Exceeded # class Solution: # # @return a tuple,(index1, index2) # def twoSum(self, num, target): # for i in range(len(num)): # for j in range(i+1,len(num)): # if (num[i] + num[j] == target): # return (i+1,j+1) #Second method O(n) HashTable #HashTable store the number's index class Solution: # @return a tuple,(index1, index2) def twoSum(self, num, target): num_hashtable = dict() result_tuple = tuple() mul_hash = dict() for i in range(len(num)): #the key don't repeat if num[i] in num_hashtable: mul_hash[num[i]] = i else: #the key do repeat num_hashtable[num[i]] = i print mul_hash print num_hashtable for i in range(len(num)): gap = target - num[i] #two cases #first : don't have same number if gap >= 0 and gap != num[i]: if num_hashtable.has_key(gap): result_tuple = (i+1,num_hashtable[gap]+1) return result_tuple #second : have same number elif gap >= 0 and gap == num[i]: if gap in mul_hash: result_tuple = (i+1,mul_hash[gap]+1) return result_tuple if __name__ == '__main__': twoSum = Solution() num = [3,2,5,7,3] # num = [0,0,3,2,8,9,7,8,9,7] # num = 0 target = 6 print twoSum.twoSum(num, target)