[ホワイト] Day31ブラシ道路テーマleetcode769。アップは、ソーティングブロック(スライディングウィンドウ法、特定の用途、究極の最適化)を完了するために

  • leetcode769。ソートが完了するまでブロック
アレイはARRある[ 01、...、arr.length - 1 ]の構成の、アレイは、いくつかの「ブロック」に分割され、ブロックがソートされます。後、再接続されたように同一の昇順による接続と元の配列の結果。

最も我々は、配列がどのように多くの部分に分かれていることができますか?

実施例1 

入力:ARR = [ 43210 ] 
出力:1 
説明:
アレイは2つ以上のブロックに分割され、希望の結果を与えることができません。
例えば、に分割[ 43 ]、[ 210 ] [結果である34012 ]、これは、順序付けられた配列ではありません。

実施例2 

入力:ARR = [ 10234 ] 
出力:4 
説明:
我々は、例えば2つに分割することができ、[ 10 ]、[ 234 ]。
しかし、〔に分割10 ]、[ 2 ]、[ 3 ]、[ 4は】ブロックの数まで得ることができます。

注:

    [ARRの長さ110 ]の間です。
    ARR [i]が[あり01。、...、arr.length - 。1一つの配置の。

出典:滞在ボタン(LeetCode)
リンク:HTTPS:// leetcode-cn.com/problems/max-chunks-to-make-sorted 
すべてのネットワークからの控除が著作権を保有。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。

私の最初の提出、スライディングウィンドウ法:

次のように:

  • [0] == 4、少なくとも第1の部分は更に数5 0〜4 0〜4の範囲にすべき、0から4でありARR場合、ケースを分割し、次のような4よりも大きい数を、発生した場合の範囲を超えるがある場合ARR [1] == 8、第1の部分は約8 0以上であるが、jは、ウィンドウの最大位置を示し、IはI〜JのI〜J、I〜Jの数の範囲まで、左端の位置を示します番号jが、私はそれが見えるよりも小さい場合には分析が見つかり、jの値を更新し、各数値は一度だけ表示され、以前の0〜I-1、充填> I =番号が存在しなければならない、説明はそのような競合は存在しません状況、
クラス解決{
 パブリックINT maxChunksToSorted(ベクトル< INT >&ARR){
         int型のRES = 0 int型 I = 0、J = 0 ; 
        
        一方、(J < arr.size()){ 
            J = MAX([I]、J ARR)。
            もし(I == J){
                 ++ RES。
                ++ 私は、
                ++ J;
                続け; 
            } 
            
            一方、(I <J && J <arr.size()){
                 ++ I、
                J = MAX(ARR [I]、J); 
            } 
            IF(Iは<J J ==を&& (arr.size)){
                 ++ RES;
                 ++ Iであり;
                 ++ J;
                 続行; 
            }             
        } 
        戻りRES; 
    } 
}; 
コード機能:コードスタイルの混乱、アイデアは明らかではありません。

第二に提出コードの最適化:

クラス解決{
 パブリックINT maxChunksToSorted(ベクトル< INT >&ARR){
         int型のRES = 0 int型 I = 0、J = 0 ; 
        
        一方、(J < arr.size()){ 
            J = MAX([I]、J ARR)。
            もし(I == J){
                 ++ RES。
                ++ 私は、
                ++ J; 
            } 
            そう であれば(私は< j)を{
                 ながら(iは<J){
                     ++ I; 
                    J = MAX([I]、J ARR)。
                }
                 ++ RES。
                ++ 私は、
                ++ J; 
            }                         
        } 
        戻りRES。
    } 
}。
  • 問題のViewソリューション、見事なコード、コードとその背後にある考え方は単純明快、礼拝ああですを参照してください。
クラス解決{
 パブリックint型 maxChunksToSorted(ベクトル< INT >&ARR){
         int型 RES = 0、MAX_ = 0; のためのint型 I = 0 ; iが<(arr.size); ++ i)が{ 
            MAX_ = MAX(MAX_ 、ARR [I])。
            もし(I == MAX_)
                 ++ のres; 
        } 
        戻りRESと、
    } 
}。

概要:タイトルは、数回の価値繰り返しブラシであるか、多くのコメントエリアダニエル!

 

おすすめ

転載: www.cnblogs.com/ACStrive/p/11613631.html