( )41 和為S的連續正數序列 滑動視窗

2021-09-24 16:27:40 字數 1571 閱讀 8955

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

輸出所有和為s的連續正數序列。序列內按照從小至大的順序,序列間按照開始數字從小到大的順序
leetcode對應題目:829. 連續整數求和

總結:這個題可以用數學來解答(但是太複雜了額,懶得看,在給的leetcode連線裡面有),我在劍指offer的答案區找到乙個比較容易理解的解答:

雙指標維護乙個視窗,視窗大小起碼為2,分別為front和back,如果從front到back的序列和大於s,可以把front向右移動,從序列中去掉較小的值,如果從front到back的序列小於s,可以把序列包含更多的數字,把back向右移動。

終止條件:多思考49 50 51 和sum= 100的終止情況。

class solution ;

int front = 1,back = 2;

vector> res;

while(front < back)

res.push_back(out);

front++;

}if(temp_sum > sum)    front++;

}return res;}};

思考: 

滑動視窗的選擇:到底是先判斷是否滿足條件再插入?還是先插入,再判斷?即視窗的右側指標指向的是當前的next還是當前?

如果是先插入再判斷,那麼指標i就是指向視窗的最右邊。

}};如果是先判斷再插入,那麼指標i就是指向視窗的最右邊的next位。此時視窗值【1,2,3】,但是指標指向的是3的next。

41 和為S的連續正數序列

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

41 和為S的連續正數序列

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

41 和為s的連續正數序列

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