小明很喜歡數學,有一天他在做數學作業時,要求計算出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...