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

2021-10-04 15:41:48 字數 1030 閱讀 1112

輸入乙個正數s,列印出所有和為s的連續正數序列(至少含有兩個數)。

例如輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以結果列印出3個連續序列1~5、4~6和7~8。

樣例

輸入:15

輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

設定兩個指標ij,分別指向連續正數序列的起始和終止

用sn表示當前連續正數序列的和

j遞增的方式遍歷整個序列(1到n), 這裡可以優化下只需要遍歷中間節點的下乙個就可以了。 代表查詢以i開頭的時候結尾j應該是多少。當sn < sum說明j應該往後移動,當sn=sum說明滿足題意,當sn > sum說明向後走即可。

時空分析

時間複雜度:o(n)

c++ **

class

solution

res.

push_back

(path)

; path.

clear()

; i++

; j++;}

else

if(sn > sum)

i++;else

if(sn < sum)

j++;}

return res;}}

;

第一版寫的程式:

class

solution

if(sn == sum)

i++;}

return res;}}

;

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

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

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

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

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

輸入乙個正數 s,列印出所有和為 s 的連續正數序列 至少兩個數 例如輸入 15,由於 1 2 3 4 5 4 5 6 7 8 15,所以結果打出 3 個連續序列 1 5 4 6 和 7 8。考慮用兩個數 small 和 big 分別表示序列的最小值和最大值。首先把 small 初始化為 1,big...