题解 | #和为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,
};

全部评论

相关推荐

halux:28✌放我一条生路吧
点赞 评论 收藏
分享
04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务