一、题目
二、思路
因为找的是连续子序列(并且题目的原序列是从小到大元素排列)的和为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; } };