小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

劍指offer 41 和為S的連續(xù)正數(shù)序列

 雪柳花明 2017-06-04

題目描述

小明很喜歡數(shù)學(xué),有一天他在做數(shù)學(xué)作業(yè)時(shí),要求計(jì)算出9~16的和,他馬上就寫(xiě)出了正確答案是100。但是他并不滿足于此,他在想究竟有多少種連續(xù)的正數(shù)序列的和為100(至少包括兩個(gè)數(shù))。沒(méi)多久,他就得到另一組連續(xù)正數(shù)和為100的序列:18,19,20,21,22?,F(xiàn)在把問(wèn)題交給你,你能不能也很快的找出所有和為S的連續(xù)正數(shù)序列? Good Luck! 
輸出描述:
輸出所有和為S的連續(xù)正數(shù)序列。序列內(nèi)按照從小至大的順序,序列間按照開(kāi)始數(shù)字從小到大的順序


/*
用兩個(gè)數(shù)字begin和end分別表示序列的最大值和最小值,
首先將begin初始化為1,end初始化為2.
如果從begin到end的和大于s,我們就從序列中去掉較小的值(即增大begin),
相反,只需要增大end。
終止條件為:一直增加begin到(1+sum)/2并且end小于sum為止
*/
class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum)
    { 
        vector<vector<int> > res;
        if(sum < 3) return res;
        int mid = (sum + 1)>>1;
        int begin = 1;
        int end = 2;
        int cur = begin + end;
        while(begin < mid && end < sum)
        {
            while(cur > sum)
            {
                cur -= begin;
                begin++;
            }
            if(cur == sum)
                InsertRes(begin,end,res);
             end++;
             cur += end;
        }
        return res;
    }
    void InsertRes(int begin,int end,vector<vector<int> > &res)
    {
        vector<int> temp;
        for(int i = begin;i<=end;i++)
            temp.push_back(i);
        res.push_back(temp);
    }
};
另一種方法:
class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum) {
        vector<vector<int>> allres;
        
        int phigh=2;
        int plow=1;
        while(phigh>plow){
            int cur=(phigh+plow)*(phigh-plow+1)/2;
            if(cur<sum){
                phigh++;
            }
            
            if(cur==sum){
                vector<int> res;
                for(int i=plow;i<=phigh;i++){
                    res.push_back(i);
                }
                allres.push_back(res);
                plow++;
            }
            
            if(cur>sum){
                plow++;
            }
        }
        
        return allres;
    }
};



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多