【LeetCode剑指offer57 II】和为s的连续正数序列(用vector模拟滑动窗口)
【摘要】
一、题目
二、思路
因为找的是连续子序列(并且题目的原序列是从小到大元素排列)的和为target,所以使用滑动窗口,如果加上当前元素后sum满足条件则push_back,如果加上当前元素后sum过...
一、题目
二、思路
因为找的是连续子序列(并且题目的原序列是从小到大元素排列)的和为target
,所以使用滑动窗口,如果加上当前元素后sum
满足条件则push_back
,如果加上当前元素后sum
过大了,则需要从该滑动窗口中,减去最前面的元素(最小元素),减着减着可能就找到新一种情况,如果减到sum
还比target
小了,那没必要继续减了,继续扩大滑动窗口的右侧边界。
三、代码
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>>ans;
vector<int>temp;
int sum = 0;
for(int i = 1; i <= target/2 + 1; i++){
sum += i;
temp.push_back(i);
if(sum == target){
ans.push_back(temp);
continue;
}
while(sum > target){
sum -= temp[0];
temp.erase(temp.begin());
//删除头元素
if(sum == target){
ans.push_back(temp);
continue;
}
}
}
return ans;
}
};
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/123779825
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)