acwing 76. 和为S的连续正数序列

地址 https://www.acwing.com/problem/content/description/72/

输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。

样例

输入:15

输出:[[1,2,3,4,5],[4,5,6],[7,8]]

  

双指针指向一个连续空间 如果和小了 则向右扩展 如果和大了 则弹出左边的值

class Solution {
public:
    
    
vector<vector<int> > vv;

vector<vector<int> > findContinuousSequence(int sum) {
    int l = 0; int r = 0;
    vector<int> nums;
    for (int i = 1; i <= sum / 2 + 1; i++) {
        nums.push_back(i);
    }

    int tmpSum = nums[l];

    while (l < nums.size() && r < nums.size() && l <= r) {
        if (tmpSum > sum) { tmpSum -= nums[l]; l++; continue; }
        else if (tmpSum < sum) {
            tmpSum += nums[r+1]; r++; continue;
        }
        else if (tmpSum == sum) {
            vector<int> v;
            for (int i = l; i <= r; i++) {
                v.push_back(nums[i]);
            }
            vv.push_back(v);
            if (r < nums.size() - 1)
                tmpSum += nums[r + 1]; 
            r++; continue;
        }
    }

    return vv;
}


};
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/11460354.html