剑指 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 协议 ,转载请注明出处!