题目描述:
要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。
输入:9
输出:[[2,3,4],[4,5]]
class Solution {
public:
//滑动窗口
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int>> result;
int low = 1,high = 2;
while(low < high){
int sumTemp = (low + high) * (high - low + 1)/2;
if(sumTemp == sum){
vector<int> temp;
for(int i = low;i <= high; ++i)
temp.push_back(i);
result.push_back(std::move(temp));
low++;//即使当前满足,那么依然要前进的,这有点滑动窗口的意思吧
}else if(sumTemp < sum) high++;
else
low++;
}
return std::move(result);//借助C++11的move函数,总体时间会更短
}
};