タイトル説明
正の数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と、 } }