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

解题思路:滑动窗口

  • 也没什么好说的,简单来说就是双指针首先同时指向一个位置,如果窗口内的和小于目标值,那么就扩大,右边增加,同时增加窗口和,如果小于,就缩小,左边减少,同时减少窗口和。
  • 直接上代码
class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> vec;
        int i = 1,j = 1,sum = 0;
        while(i <= target/2)
        {
            if(sum < target)
            {
                sum += j;
                j++;
            }
            else if(sum > target)
            {
                sum -= i;
                i++;
            }
            else
            {
                vector<int> ans;
                for(int k = i;k < j;k++)
                {
                    ans.push_back(k);
                }
                vec.push_back(ans);
                sum -= i;
                i++;
            }
        }
        return vec;
    }
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

Shiro简单实例 Previous
数组中的逆序对 Next