通知
关于网站更多信息请加whimurmur模板/jpress插件QQ群(1061691290)            网站从因情语写改为晴雨            这个网站的模板也从calmlog_ex改为 whimurmur

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

234人浏览 / 0人评论 / | 作者:whisper  | 分类: 剑指offer2  | 标签: 剑指offer2  | 

作者:whisper

链接:https://www.proprogrammar.com/article/867

声明:请尊重原作者的劳动,如需转载请注明出处


剑指 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

难度:简单;标签:无;编程语言:C++


 我的解法

class Solution {
public:
    // 想法:滑动窗口
    vector<vector<int>> findContinuousSequence(int target) {
        int sum = 3, start = 1, end = 2;
        vector<vector<int>> res;

        while(true){
            if(sum == target){
                vector<int> temp;
                for(int i = start; i <= end; i++){
                    temp.push_back(i);
                }
                res.push_back(temp);
                sum -= start;
                start++;
            }else if(sum < target){
                end++;
                sum  += end;
            }else{
                sum -= start;
                start++;
            }

            if(start > end || (sum > target && end - start <= 1)){
                break;
            }
        }

        return res;
    }
};

滑动窗口start, end,先1,2两个数,sum为start~end的和,然后小的话end加,大的话start加,直到start>end或者只有一个数且这个数大于target


其它解法

很类似,略


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告