輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。
示例:
輸入:target = 9假若我們輸入的 target 為 9,大腦中應該有下面這麼個玩意:輸出:[[2,3,4],[4,5]]
然後我們通過左右指標來維護乙個滑動視窗,同時計算視窗內的值是否是目標值:
如果視窗的值過小,我們就移動右邊界。
如果視窗的值過大,我們就移動左邊界。
剩下的就是反覆上面的操作就可以了。到這裡分析過程看似結束了。但是我們可以觀察出一丟丟規律,用來優化我們的演算法。對於任意乙個正整數,總是小於它的中值與中值+1的和。為了讓大家直觀,用下圖舉例:
比如這裡的100,就一定小於50+51,換成其他數也一樣。換句話說,一旦視窗左邊界超過中值,視窗內的和一定會大於 target。
func findcontinuoussequence(target int) intfor i <= target/2 else if win > target else
}return result
}
和為S的連續正數序列
題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...