【剑指 offer】和为S的连续正序列。(双指针)
2019-05-08 本文已影响0人
邓泽军_3679
1、题目描述
输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
样例
输入:15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
2、问题描述:
3、问题关键:
- 双指针,区间内的相加等于sum就加入结果,否则
i ++
, 或者j ++
。
4、C++代码:
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<vector<int>> res;
vector<int> path;
for (int i = 1, j = 2; j < sum && i < j; j) {
int a = (i + j) * (j - i + 1) / 2;//区间内的和。
if (a == sum) {
int k = i;
while(k <= j) path.push_back(k ++);//将区间加入结果。
res.push_back(path);
path.clear();
i ++, j ++;
}
else if (a < sum) j ++;
else i ++;
}
return res;
}
};