基本思路:滑动窗口,维护左端点l与右端点r,由于至少有两个数,所以循环终止条件为l < r。
通过左端点与右端点可以算出区间和,如果大于目标则右移左端点,小于则右移右端点,等于则将滑动窗口内的数存储在结果中。
由于每次只滑动一个数,且要求的是区间和,所以区间和可以在滑动窗口滑动时计算,避免了乘法运算。
class Solution {
public:
vector<vector<int>> FindContinuousSequence(int sum) {
vector<vector<int>> res;
int l = 1, r = 2, nows = 3;
while (l < r) {
if (nows == sum) {
vector<int> tmp;
for (int i = l; i <= r; i++) {
tmp.push_back(i);
}
res.push_back(tmp);
nows -= l++;
}
else if (nows > sum) {
nows -= l++;
}
else {
nows += ++r;
}
}
return res;
}
};

京公网安备 11010502036488号