剑指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 @   BailanZ  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示