劍指offer41 和為S的連續正數序列

2022-07-11 07:03:08 字數 1114 閱讀 5611

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

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序

窮舉i表示連續的正數序列的元素個數,最少為2個,所以初始化為2.

當tsum<3時,不存在這樣的序列。

迴圈條件: n*(n-1)/2<=tsum

當i是偶數時,序列滿足兩兩結對和=tsum/(i/2), 且位於最中間的兩個元素和滿足:

a+b=tsum/(i/2)

b-a=1

所以i為偶數時條件:tsum%(i//2)==0 and (tsum//(i//2))%2==1,由序列連續可以推出序列第j個元素為 j+(tsum//(i/2)-1)//2-(i/2-1),j=0,1,...,i.

i為奇數時,位於最中間的元素等於序列均值,因此條件為:tsum%i==0,推出序列第j個元素為 j+(tsum//i)-(i-1)/2,j=0,1,...,i.

#

-*- coding:utf-8 -*-

class

solution:

deffindcontinuoussequence(self, tsum):

#write code here

a,b=,

if tsum<3:

return

a i=2

while (i+i**2)<=2*tsum:

a=if i%2==0:

if tsum%(i//2)==0 and (tsum//(i//2))%2==1:

for j in

range(i):

else

:

if tsum%i==0:

for j in

range(i):

i+=1

ifa: b.reverse()

return b

劍指offer 41 和為S的連續正數序列

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

劍指Offer 41 和為S的連續正數序列

雙指標法,指標均單向移動,求和 記憶體超限 您的程式使用了超過限制的記憶體,case通過率為0.00 class solution result.push back tmp else if tempsum對照書上的 感覺自己的 思路沒有問題,檢視答案區發現了幾個問題 1 while迴圈為增強魯棒性,...

劍指Offer 41 和為S的連續正數序列

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