剑指offer(57)-II

剑指offer(57)-II

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

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

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]

示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制:

  • 1 <= target <= 10^5

简单滑动窗口

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>>ans;
        //滑动窗口
        int l=1;int r=2;int s=3;
        while(l<r){
            //如果和==target 存入结果
            if(s==target){
                vector<int>res;
                for(int i=l;i<=r;i++){
                    res.push_back(i);
                }
                ans.push_back(res);
            }
            //如果和大于等于target 就需要缩短左边界 让s变小
           if(s>=target){
               s-=l;//更新s
               l++;
           }else{
               //如果和小于target需要放大右边界
               r++;
               s+=r;//更新s
           }
        }
        return ans;
    }
};

posted @ 2022-05-05 22:17  BailanZ  阅读(15)  评论(0编辑  收藏  举报