小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

C++两端移动法求解

初始头p=1,求出尾e使得区间内的值刚好不大于sum,二次求根公式完事了。此时总和就是total。
循环条件 p<e(至少两个数
如果total比sum大,减去头部;total比sum小,加上尾部,注意(P++)、(++E)
当total=sum时,把p e区间的数push进tmp,再整体push进tp。
完事。


class Solution {
public:
    vector<vector> FindContinuousSequence(int sum) {  vector<vector>tp;
        if(sum<1) return tp;
        int p=1,e=(int)(sqrt(1+8sum)-1)/2;
        int total=(1+e)e/2;
        while(p<e){
            if(total>sum) total-=(p++);
            else if(total<sum) total+=(++e);
            else{
                vectortmp;
                for(int t=p;t<=e;t++) tmp.push_back(t);
                    tp.push_back(tmp);
                    total-=(p++);
                    total+=(++e);
                }
        }
    return tp; } };


vector ['vektə] 详细X
基本翻译
n. 矢量;带菌者;航线
vt. 用无线电导航
网络释义
vector: 载体
vector graphics: 矢量图形
row vector: 行向量