1.输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
基本思路:设置一前一后两个指针往内逼近。
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
small = 0
big = len(array) - 1
while small < big:
if array[small] + array[big] == tsum:
return [array[small], array[big]]
elif array[small] + array[big] > tsum:
big -= 1
else:
small += 1
return []
2.小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
思路1:找规律。
思路2:借鉴上一题的思想,注意指针的起始位置有所不同。
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
results = []
if tsum > 2:
small = 1
big = 2
temp_sum = small + big
while small < (tsum + 1) / 2:
if temp_sum == tsum:
results.append([item for item in range(small, big + 1)])
while temp_sum > tsum and small < (tsum + 1) / 2:
temp_sum -= small
small += 1
if temp_sum == tsum:
results.append([item for item in range(small, big + 1)])
big += 1
temp_sum += big
return results