• Leetcode Two Sum


    #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)
    

      

  • 相关阅读:
    【小米oj】 dreamstart 的催促
    【小米oj】 抢劫!
    【小米oj】 数数有几个岛
    【小米oj】 找出单独出现的数字II
    【小米oj】 出现频率最高的前 K 个元素
    【小米oj】 分糖果
    【小米oj】 需要多少个立方数
    【小米oj】 反向位整数
    linux内核参数注释与优化
    设置yum源:
  • 原文地址:https://www.cnblogs.com/xieweichong/p/4267549.html
Copyright © 2020-2023  润新知