劍指Offer刷題筆記 和為S的連續正數序列

2021-09-26 08:02:12 字數 960 閱讀 8068

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

輸出描述:

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

思路:連續數列求和通過知道首尾數字就能知道(等差數列求和)。所以需要倆個指標分別指向頭尾數字,讓頭指標遍歷所有數字,固定頭指標的同時,移動尾指標尋找在這個頭指標的情況下的序列。這種演算法複雜度是o(n^2)。另一種思路是根據當前連續序列的和與要求的和的大小關係,移動兩個指標的位置。兩個指標開始分別指向1、2,一路向左移動,組成乙個滑動視窗。

視窗裡的和大於要求就頭指標向左移,小於就尾指標向左移。

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

class solution:

def findcontinuoussequence(self, tsum):

# write code here

result =

low, high = 1, 2

while low < high:

cursum = (low + high) * (high - low + 1) / 2

# 等於要求就儲存起來

if cursum == tsum:

tmp =

for i in range(low, high+1):

low += 1 # high += 1 也行

# 移動指標

elif cursum < tsum:

high += 1

else:

low += 1

return result

劍指offer刷題筆記

給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。struct treenode class solution treenode kthnode treenode proot,int k 非遞迴實現 class solution...

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...