小明很喜歡數學,有一天他在做數學作業時,要求計算出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。現在把問題交給你,你能不能也很快的...