剑指offer57.2 和为S的连续正数序列
输入一个正数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]]
思路:
双指针法一个big,一个small指针,samll = 1,big = 2,currentSum记录目前small和big之间的和,若是currentSum<sum,则big++,currentSum+=big;若是currentSum>sum,则currentSum-=small,samll++;若是current==sum,则打印small到big之间的数值,然后big++,currentSum+=big。
AcWing-76 C++ code:
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<vector<int>> res;
int small = 1;
int big = 2;
int middle = (1 + sum) / 2;
int currentSum = small + big;
while(small < middle){
if(currentSum == sum){
vector<int> temp;
for(int i = small; i <= big; i++){
temp.push_back(i);
}
res.push_back(temp);
}
if(currentSum > sum){
currentSum -= small;
small++;
}else{
big++;
currentSum += big;
}
}
return res;
}
};