题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
tips:滑动窗口,根据窗口和进行一次遍历。窗口有两个指针[p1,p2]表示,初试窗口为[0,1],若sum<target,p2+1;若sum>target,p1+1;若等于,res.append([p1,p2]),且p1+1,p2+1。
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
def suma(a,b):
return (a+b)*(b-a+1)/2
if tsum<=2:
return []
s,e=1,2
res=[]
while s<e:
if e>tsum//2+1:
break
if suma(s,e)<tsum:
e+=1
elif suma(s,e)==tsum:
res.append([i for i in range(s,e+1)])
e+=1
s+=1
else:
s+=1
return sorted(res,key=lambda x:x[0])