输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
1 # -*- coding:utf-8 -*- 2 class Solution: 3 def FindNumbersWithSum(self, array, tsum): 4 n = len(array) 5 i,j = 0,n-1 6 while i<j: 7 cur = array[i] + array[j] 8 if cur == tsum: 9 return [array[i],array[j]] 10 if cur < tsum: 11 i += 1 12 else: 13 j -= 1 14 return [] 15 # write code here
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
1 # -*- coding:utf-8 -*- 2 class Solution: 3 def FindContinuousSequence(self, tsum): 4 start,end,cursum = 1,2,3 5 result = [] 6 while end < tsum: 7 if cursum > tsum: 8 cursum -= start 9 start += 1 10 elif cursum < tsum: 11 end += 1 12 cursum += end 13 else: 14 l = [] 15 for i in range(start,end+1): 16 l.append(i) 17 result.append(l) 18 cursum -= start 19 start += 1 20 end += 1 21 cursum += end 22 return result 23 # write code here