题解 | #和为S的连续正数序列#

和为S的连续正数序列

https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

基本思路:滑动窗口,维护左端点l与右端点r,由于至少有两个数,所以循环终止条件为l < r。

通过左端点与右端点可以算出区间和,如果大于目标则右移左端点,小于则右移右端点,等于则将滑动窗口内的数存储在结果中。

由于每次只滑动一个数,且要求的是区间和,所以区间和可以在滑动窗口滑动时计算,避免了乘法运算。

class Solution {
public:
    vector<vector<int>> FindContinuousSequence(int sum) {
        vector<vector<int>> res;
        int l = 1, r = 2, nows = 3;
        while (l < r) {
            if (nows == sum) {
                vector<int> tmp;
                for (int i = l; i <= r; i++) {
                    tmp.push_back(i);
                }
                res.push_back(tmp);
                nows -= l++;
            }
            else if (nows > sum) {
                nows -= l++;
            }
            else {
                nows += ++r;
            }
        }
        return res;
    }
};

全部评论

相关推荐

勤劳的香菇求被捞求offer:满帮笔试都不给我发 似乎被卡本了
投递满帮集团等公司10个岗位
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务