1、题目描述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
限制:1 <= target <= 10^5
2、示例
输入:target = 9
输出:[[2,3,4],[4,5]]
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
3、题解
连续子序列感觉无脑滑动窗口。
基本思想:滑动窗口,维护滑动窗口[left,right]窗口内的和为sum,如果sum==target,直接加入res,如果sum>target,left++,如果sum<target,right++。
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>> res;
int left=1,right=2,sum=3;
while(left<right)
{
if(sum==target)
{
vector<int> tmp;
for(int i=left;i<=right;i++)
tmp.push_back(i);
res.push_back(tmp);
sum-=left;
left++;
}
else if(sum>target)
{
sum-=left;
left++;
}
else
{
right++;
sum+=right;
}
}
return res;
}
};