题解 | #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
};
全部评论

相关推荐

面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务