詳細なスライディングウィンドウの問題

「ダブルポインタ」、我々の要求を満たすために、両手の相対位置を調整し、条件の決意によって定義された2つのポインタを使用して、次々と言っ窓をスライドすることは私たちの日常です。

話は安いです、私のコードを表示します。のは、実用的な運動セッションに直接アクセスしてみましょう。"

タイトル説明

暁明は、彼が計算するのに必要と9〜16は、彼はすぐに正しい答えは100で書いた、数学の宿題をやっていた、数学、1日の非常に好きです。彼はこれに満足していなかった。しかし、彼は(少なくとも二つの数字を含む)100がどのように多くの連続した正数列の種類疑問に思いました。18,19,20,21,22:長い前に、彼は連続した正の数と100のシーケンスの別のセットを得ました。今、あなたの質問は、あなたもすぐにすべての正と連続シーケンスS?幸運を識別することができます!

出力説明:

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

私たちは、最初の小さなアイデアを分析し、それが継続的に続く一連Sのすべての私達の正シリーズ、2つの定義された条件があることに注意してください、正の第1の連続出力を必要とします。私たちがあると考えることができ、連続正の列の最小数は何ですか?1と2はい。第二に、彼はその後、我々は上-1を得ることができ、構築するために始めた小さなから大量にシーケンスを尋ねた列の数を蓄積します。
以下は、特定の問題解決のアイデアです

  • 私たちの戻り値として、二重のArrayList配列の結果を作成します。
  • phigh>は、ループ終了条件は、当社で耕しながら2つのスライダーの初期値は、= 2 = 1 phighを耕します
  • 加算式(phigh +プラウ)*(phigh - プラウ+ 1)/ 2式の判定方法のパラメータの結果とケースのサイズ
  • 新しいリスト、追加phigh値に全体プラウ、その後、加算結果の一覧に等しいです
  • 数よりも少ないが、我々はphighことを十分に大きくないです++
  • 我々はあまりにもplow--数よりも大きいです

以上の工程により、コードを書くのは難しいことではありません。

公共のArrayList <のArrayList <整数>> FindContinuousSequence(int型の合計){ 

        のArrayList <のArrayList <整数>>結果= 新規のArrayList <> ();
        INTプラウ= 1、phigh = 2 一方、(phigh> プラウ){
             もし、((phigh +プラウ)*(phigh -プラウ+ 1)/ 2 ==の合計){ 
                のArrayList <整数>リスト= 新規のArrayList <> ();
                int型 ; I <= phigh I ++は、I =プラウを{)
                    list.add(I)。
                }
                result.add(リスト); 
                耕す ++ ; 
            } そう であれば((phigh +プラウ)*(phigh -プラウ+ 1)/ 2 < 合計){ 
                phigh ++ 
            } { 
                プラウ ++ 
            } 
        } 
        戻り値の結果; 
    }

 

この記事はあなたを助けるために期待しています!

おすすめ

転載: www.cnblogs.com/jiangtunan/p/11086951.html