牛客網 和為S的連續正數序列

2021-08-22 11:37:53 字數 1899 閱讀 9680

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

自己的想法是利用(a1+an)*n/2=sum,以及an-a1=n-1的關係求出結果。解法如下,

# -*- coding:utf-8 -*-

class solution:

def findcontinuoussequence(self, tsum):

# write code here

# n 為序列的最大長度

n=tsum//2+1

tmp_n=n

# 根據公式(a1+an)*n/2=tsum

res=

while tmp_n>1 :

if (2*tsum/tmp_n+1-tmp_n)>0 and (2*tsum/tmp_n+1-tmp_n)%2==0:

a1 = (2 * tsum / tmp_n + 1 - tmp_n) / 2

cur_ans=[(a1+i) for i in range(tmp_n)]

tmp_n=tmp_n-1

return res

但是沒有通過測試用例15,在本機上執行通過[[1.0, 2.0, 3.0, 4.0, 5.0], [4.0, 5.0, 6.0], [7.0, 8.0]],但是在牛客網上提交時顯示輸出為[[1,2,3,4,5],[2,3,4,5],[4,5,6],[7,8]],多出來乙個[2,3,4,5],不知道是怎麼出來的,為了篩去這些不正確的結果,增加了乙個判斷,最終解法如下:

# -*- coding:utf-8 -*-

class solution:

def findcontinuoussequence(self, tsum):

# write code here

# n 為序列的最大長度

n=tsum//2+1

tmp_n=n

# 根據公式(a1+an)*n/2=tsum

res=

while tmp_n>1 :

if (2*tsum/tmp_n+1-tmp_n)>0 and (2*tsum/tmp_n+1-tmp_n)%2==0:

a1 = (2 * tsum / tmp_n + 1 - tmp_n) / 2

cur_ans=[(a1+i) for i in range(tmp_n)]

if sum(cur_ans)==tsum:

tmp_n=tmp_n-1

return res

另一解法:參考和為s的連續正數序列

# -*- coding:utf-8 -*-

class solution:

def findcontinuoussequence(self, tsum):

if tsum < 3:

return

small = 1

big = 2

middle = (tsum + 1)>>1

cursum = small + big

output =

while small < middle:

if cursum == tsum:

big += 1

cursum += big

elif cursum > tsum:

cursum -= small

small += 1

else:

big += 1

cursum += big

return output

牛客網 和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...

牛客網 劍指offer 和為S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...

牛客解題思路 和為 S 的連續正數序列

思路 輸出所有和為 s 的連續正數序列。例如和為 100 的連續序列有 9,10,11,12,13,14,15,16 18 19,20 21,22 題目很簡單,但是答案都是千篇一律,為啥大家都喜歡在迴圈中再套乙個迴圈啊,我覺得這樣很浪費時間呀,因為這一題主要的思路就是雙指標 開始我以為在考察字首和。...