题解 | #JZ74 和为S的连续正数序列#
和为S的连续正数序列
http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe
```function FindContinuousSequence(sum)
{
// write code here
//注意时间复杂度,双循环遍历复杂度是n的平方
//采用滑动窗口解,当左边界i到右边界j的和小于sum时,扩大窗口j++,大于时缩小窗口i++
//若等于sum,则存储这个i到j,并i++,j++重置窗口,终止条件为左边界到sun的一半
if(sum<3){return []}
let i=1
let j=2
let cur=i+j
let resArr=[]
function FindArray(left,right){ //自己封装一个打印从left到right的连续整数数组
let res=[]
for(let i=left;i<=right;i++){
res.push(i)
}
return res
}
while(i<=Math.floor(sum/2)){
if(cur===sum){
resArr.push(FindArray(i,j))
j++
cur+=j //窗口先扩大,当前和加上右边刚扩进来的右边界数
}
if(cur<sum){
j++
cur+=j
}
if(cur>sum){
cur-=i //当前和减去原来的左边界数,之后左边界右移,即窗口后缩小
i++
}
}
return resArr
}
module.exports = {
FindContinuousSequence : FindContinuousSequence
};