和为s的连续正数序列,和为s的两个数字


1.题目描述
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
思路:
设置两个变量,small,big,如果连续和小于给定值,增加big,大于给定值,增加small,如果相等,将连续序列加入结果中,同时增加small和big,以便找到下一组连续序列
代码
 1 # -*- coding:utf-8 -*-
 2 class Solution:
 3     def FindContinuousSequence(self, tsum):
 4         # write code here
 5         res = []
 6         if tsum<=2:#2及2以下不存在
 7             return res 
 8         small = 1
 9         big = 2
10         while small < big: 
11             lst = []
12             #for i in range(small,big+1,1):
13                 #lst.append(i)
14             lst = [i for i in range(small,big+1,1)] #简写方式
15             if sum(lst)> tsum:
16                 small +=1
17             elif sum(lst)< tsum:
18                 big +=1
19             else:
20                 res.append(lst)
21                 small += 1
22                 big += 1         
23         return res   
24                

2.题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输出描述:

对应每个测试案例,输出两个数,小的先输出。

 1 # -*- coding:utf-8 -*-
 2 class Solution:
 3     def FindNumbersWithSum(self, array, tsum):
 4         # write code here
 5         res = []
 6         if len(array)==0:
 7             return res
 8         small = 0
 9         big = len(array)-1
10         while small < big:
11             if array[small] + array[big]==tsum:
12                 res.append(array[small])
13                 res.append(array[big])
14                 break
15             if array[small] + array[big] > tsum:
16                 big -= 1
17             else:
18                 small+=1
19         return res
20         

note:

res.append(array[small],array[big]) 报错,append函数只有一个参数

原文地址:https://www.cnblogs.com/shuangcao/p/12794076.html