首页 > 其他 > 详细

面试题57 - II. 和为s的连续正数序列

时间:2020-03-06 20:18:37      阅读:35      评论:0      收藏:0      [点我收藏+]

题目:

 

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

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

 

解答:

方法1:

暴力就完事了嗷

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> res;
        vector<int> cur;
        for(int i=target/2+1;long(i)*(i+1)>=2*target;--i){
            int p=target,j=i;
            while(p>0 and p>=j){
                p-=j;
                --j;
            }
            if(p==0){
                for(int k=j+1;k<=i;++k){
                    cur.emplace_back(k);
                }
                res.emplace_back(move(cur));
            }
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

方法2:

滑动窗口,因为是连续的数字和,挺明显要用滑窗的。。应该做题时能注意到这个信息点的阿。o(︶︿︶)o 唉

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> res;
        int le=1,ri=1,cur_sum=0;
        while(ri<target/2+3){
            while(cur_sum<target){
                cur_sum+=ri++;
            }
            if(cur_sum==target){
                res.push_back({});
                for(int i=le;i<ri;++i){
                    res.back().emplace_back(i);
                }
                cur_sum+=ri++;
            }
            else{//>
                while(cur_sum>target){
                    cur_sum-=le++;
                }
            }
        }
        return res;
    }
};

 

面试题57 - II. 和为s的连续正数序列

原文:https://www.cnblogs.com/FdWzy/p/12430350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!