题目一:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
先遍历每个元素,在做差,看看差值在不在里面,因为数组是排序过的,所以乘积较小的肯定就是离得最远的,、python 的话还是很方便的
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if len(array) == 0:
return []
num = 0
for i in array:
num += 1
another = tsum - i
if another in array:
return i,another
if num == len(array):
return []
题目一:和为S的2个数字
输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可
思路:2个指针,一个队首,一个队尾,当2个数字之和大于s,就把大的向前移,当2个数字之和小于s,就把小的向后移,
class Solution:
def sumrm(self, L,s):
if L == [] or L is None:
return None
i,j = 0,len(L)-1
while i < j:
sumn = L[i] + L[j]
if sumn < s:
i +=1
elif sumn > s:
j = j - 1
else:
return L[i],L[j]
题目三:和为S的连续正数序列
输入一个正数s,打印出所有和为s的连续正数序列(至少包含2个数)
解法:按照书上的思路写的代码,在平台上运行出错,不清楚为什么,在自己的IDE上就可以。。。代码如下
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
if tsum < 3:
return []
small = 1
big = 2
middle = (1 + tsum)//2
curSum = small + big
while small < middle:
if curSum == tsum:
self.printsequence(small, big, tsum)
while curSum > tsum and small < middle:
curSum = curSum - small
small += 1
if curSum == tsum:
self.printsequence(small, big, tsum)
big = big + 1
curSum = curSum + big
def printsequence(self, small, big, tsum):
L = []
for i in range(tsum):
L.append(i)
print (L[small:big+1])
c = Solution()
c.FindContinuousSequence(9)
牛客上大佬的解法思路也是这样,其中输出直接用列表生成,而不是我的for循环完成,是这里的问题吗?不清楚测试代码。。。# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
if tsum < 3:
return []
small = 1
big = 2
middle = (tsum + 1)>>1
curSum = small + big
output = []
while small < middle:
if curSum == tsum:
output.append(range(small, big+1))
big += 1
curSum += big
elif curSum > tsum:
curSum -= small
small += 1
else:
big += 1
curSum += big
return output