ソートIIを作るためにソートマックスチャンクを作るためにLeetCode 769マックスチャンク

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/max-chunks-to-make-sorted/

トピック:

配列を指定して  arr の順列で  [0, 1, ..., arr.length - 1]、我々は「チャンク」(パーティション)のいくつかの数に配列を分割し、個別に各チャンクを並べ替えます。それらを連結した後、結果がソートされた配列に等しいです。

私たちが作っている可能性がチャンクのほとんどの数は何ですか?

例1:

入力:ARR = [4,3,2,1,0] 
出力:1つの
説明:
二つ以上のチャンクに分割が必要な結果を返しません。
例えば、[4,3]、に分割[2、1、0]、ソートされていない[2 3、4、0、1]になります。

例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]

 

ソリューション:

例から、我々は自分自身を含め、その左のすべての値は、すべてのインデックスをカバーできる点までの場合は、インデックスの動きを伝えることができ、それはチャンクに分割することができます。

[2、0、1]。I = 0、すべての値が[2]、インデックスi = 0は0で覆われていない場合、それはチャンクではありません。

I = 1の値が[2,0]、I = 1が1で覆われていない、それはチャンクではありません。

I = 2値[2、0、1]のすべてのインデックスが覆われ得ます。それはチャンクに分割することができます。

すべてのインデックスがcoverredしている場合、どのように指示します。一つの方法は、最大== iは、すべてのインデックスがcoverredされている場合、最大を維持することです。最大場合は!=私は、それから、最大は私よりも大きくなければなりません。すなわち、より大きなスキャンつの値があることを意味し、まだスキャンされていない1つのインデックス位置が存在しなければなりません。

時間計算:O(n)を。N = arr.length。 

スペース:O(1)。

ACのJava:

1  クラスソリューション{
 2      公共 INT maxChunksToSorted(INT [] ARR){
 3          INT RES = 0 4          もし(ARR == NULL || arr.length == 0 ){
 5つの             リターンRES。
6          }
 7          
8          int型の最大値= 0 図9は、         のためにint型 i = 0; I <arr.length; iは++ ){
 10              、最大= Math.max(最大、ARR [I])。
11              であれば(MAX == I){
 12の                  RES ++;
13              }
 14          }
 15の         
16          戻りRES。
17      }
 18 }

追いつくために最大チャンクにするためにソートII

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/11367286.html