安全性を証明する:連続して正のシーケンスS

タイトル説明

正の数Sを入力し、(少なくとも2つの数値を含む)全ての連続する正のシーケンスSをプリントアウト。

例えばによる入力15は  1+2+3+4+5=4+5+6=7+8=15、それが1~8 6に5,4および7の三つの連続配列の結果をプリントアウトします。

サンプル

入力:15 

出力:[ 1,2,3,4,5]、[4,5,6]、[7,8]

出力説明:

すべての正の出力と連続数列S. 開始昇順に従ってシーケンス番号との間の昇順で昇順

 

ソリューション

二つのポインタは、  p, q 最小値と最大値のシーケンスを示しています。シーケンスがSより大きい場合、シーケンスは小さな値、すなわちから除去され  ++p、シーケンスがS未満である場合、さらなる配列、すなわち、デジタル権利を含みます  ++q

S pは半分が停止以上であるとき。

 

 

輸入はjava.util.ArrayList;
パブリック クラスソリューション{
     公共のArrayList <のArrayList <整数>> FindContinuousSequence(int型の合計){ 
       のArrayList <のArrayList <整数>> RES = 新規のArrayList <> (); 
        
        もし(合計<3 ){
             戻りRES。
        } 
        INT P = 1、Q = 2 int型半ば=(1点の+合計)>> 1。  //
         int型 curSum = P + Q;
        一方、(P < MID){
             場合(curSum == 合計){ 
                res.add(GETLIST(P、Q))。
            } 
            
            一方(curSum>和&& P < MID){ 
                curSum - = P。
                P ++ ;
                もし(curSum == 合計){ 
                    res.add(GETLIST(P、Q))。
                } 
            }
             ++ Q。
            curSum + = Q。
        } 
        戻りRESと、
    } 
    
    プライベートのArrayList <整数> GETLIST(int型 L、INT R){ 
        のArrayList <整数> RES = 新しいですArrayList <> ();
        にとってint型 = L Iと、iが<= R; iは++ ){ 
            res.add(i)を、
        } 
        戻りRESと、
    } 
}

 

おすすめ

転載: www.cnblogs.com/lisen10/p/11460402.html