欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DHU高级程序设计-leetcode刷题剑指 Offer 57 - II. 和为s的连续正数序列

程序员文章站 2024-02-04 08:31:10
...

剑指 Offer 57 - II. 和为s的连续正数序列

题目描述:
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例一:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例二:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:1 <= target <= 10^5
思路:评论区思路-滑动窗口
分别定义一个左右指针,不断移动右指针,sum做累加,当sum==target时,把窗口l-r之间的数值入vector并存入结果数组;当sum>target值时,sum-l值,l向右移动一个。
代码:

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        int l,r,sum;
        vector<vector<int>> res;
            for(r=1,l=1,sum=0;r<target;r++)
            {
                sum+=r;
                while(sum>target)
                {
                    sum-=l;
                    l++;
                }
                if(sum==target)
                {
                    vector<int> nums;
                    for(int i=0;i<r-l+1;i++)
                    nums.push_back(l+i);//注意:此时入组的值要记得加l指向的开始位置
                    res.push_back(nums);
                }
            }
        return res;
    }
};