题解 | #和为S的连续正数序列#

和为S的连续正数序列

https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

function FindContinuousSequence(sum) {
    // 使用左右指针维持一个滑动窗口
    // 区间和为((r - l + 1)2)*(l + r)(等差数列求和公式)
    // 左指针从1开始,右指针从2开始如果区间和正好等于目标数说明以左指针开始的序列找到了,记录下该序列,左指针右移(因为从左指针开始的区间不会再存在相等的序列了)
    // 如果区间和大于目标数则左指针右移
    // 如果区间和小于目标数则右指针右移
    let left = 1;
    let right = 2;
    let sum1 = 0;
    let res = [];
    while (left < right) {
        // 求当前区间和
        sum1 = (left + right) * ((right - left + 1) / 2);
        // 如果当前区间和等于sum,则将结果加入到结果数组中,并将左指针右移
        if (sum1 === sum) {
            let temp = [];
            for (let i = left; i <= right; i++) {
                temp.push(i);
            }
            res.push(temp);
            left++;
        } 
        // 如果当前和小于sum,则将右指针右移
        else if (sum1 < sum) {
            right++;
        } 
        // 如果当前和大于sum,则将左指针右移
        else {
            left++;
        }
    }
    return res;
}
module.exports = {
    FindContinuousSequence: FindContinuousSequence,
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-22 18:57
点赞 评论 收藏
分享
03-29 12:10
门头沟学院 C++
挣K存W养DOG:散漫消极者淘汰,一眼坑爹。实习几个月转正的时候说你加班太少,能力还行态度不够积极裁了,马上老实。
点赞 评论 收藏
分享
03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务