一个pp指针指向数列较小的数,p指向较大的数。若p到pp的和小于sum,就要p++,若大于sum就要p++,相等就记录要的结果并p++。
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int> > ret;
if (sum < 3) {
return ret;
}
int pp = 1;
int p = 2;
while (pp < p) {
if ((pp + p)*(p - pp + 1) / 2 == sum) {
//给二维vector添加元素
vector<int> tmp;
for (int i = pp; i <= p; i++) {
tmp.push_back(i);
}
ret.push_back(tmp);
p++;
}
else if ((pp + p)*(p - pp + 1) / 2 > sum) {
pp++;
}
else {
p++;
}
}
return ret;
}
vector<vector<int> > FindContinuousSequence(int sum) {
int tmp_sum = 1;
int start = 1;
int end = 1;
vector<vector<int> > result;
vector<int> tmp_vec;
tmp_vec.push_back(end);
for(; end<= 100 && start <= end; )
{
if(tmp_sum == sum)
{
if(tmp_vec.size() > 1)
{
result.push_back(tmp_vec);
}
++end;
tmp_sum += end;
tmp_vec.push_back(end);
}
else if(tmp_sum < sum)
{
++end;
tmp_sum += end;
tmp_vec.push_back(end);
}
else
{
tmp_sum -= start;
++start;
tmp_vec.erase(tmp_vec.begin());
}
}
return result;
}