劍指Offer 程式設計題41 和為S的連續正數序列

2021-08-21 17:02:01 字數 1073 閱讀 7604

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

牛客網:鏈結

思路:設定兩個指標,乙個指向第乙個數,乙個指向最後乙個數,在此之前需要設定第乙個數和最後乙個數的值,由於是正數序列,所以可以把第乙個數設為1,最後乙個數為2(因為是要求是連續正數序列,最後不可能和第乙個數重合)。下一步就是不斷改變第乙個數和最後乙個數的值,如果從第乙個數到最後乙個數的和剛好是要求的和,那麼把所有的數都新增到乙個序列中;如果大於要求的和,則說明從第乙個數到最後乙個數之間的範圍太大,因此減小範圍,需要把第乙個數的值加1,同時把當前和減去原來的第乙個數的值;如果小於要求的和,說明範圍太小,因此把最後乙個數加1,同時把當前的和加上改變之後的最後乙個數的值。這樣,不斷修改第乙個數和最後乙個數的值,就能確定所有連續正數序列的和等於s的序列了。

注意:初中的求和公式應該記得吧,首項加尾項的和乘以個數除以2,即sum = (a + b) * n / 2。

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

class solution:

def findcontinuoussequence(self, tsum):

# write code here

if tsum < 3:

return

start = 1

end = 2

result =

while start < end:

temp = (start + end) * (end - start + 1) / 2

if temp == tsum:

start += 1

elif temp < tsum:

end += 1

else:

start += 1

return result

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

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

劍指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迴圈為增強魯棒性,...