- leetcode769。ソートが完了するまでブロック
アレイはARRある[ 0、1、...、arr.length - 1 ]の構成の、アレイは、いくつかの「ブロック」に分割され、ブロックがソートされます。後、再接続されたように同一の昇順による接続と元の配列の結果。 最も我々は、配列がどのように多くの部分に分かれていることができますか? 実施例1 : 入力:ARR = [ 4、3、2、1、0 ] 出力:1 説明: アレイは2つ以上のブロックに分割され、希望の結果を与えることができません。 例えば、に分割[ 4、3 ]、[ 2、1、0 ] [結果である3、4、0、1、2 ]、これは、順序付けられた配列ではありません。 実施例2 : 入力:ARR = [ 1、0、2、3、4 ] 出力:4 説明: 我々は、例えば2つに分割することができ、[ 1、0 ]、[ 2、3、4 ]。 しかし、〔に分割1、0 ]、[ 2 ]、[ 3 ]、[ 4は】ブロックの数まで得ることができます。 注: [ARRの長さ1、10 ]の間です。 ARR [i]が[あり0、1。、...、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と、 } }。
概要:タイトルは、数回の価値繰り返しブラシであるか、多くのコメントエリアダニエル!!!。