繰り返し回数のための-287ルックのLeetcodeテーマ別二分法(重複番号を探します)

繰り返し回数のための-287ルックのLeetcodeテーマ別二分法(重複番号を探します)


 

 

所与  N-  整数+ 1つのアレイ  NUMS 1からの数であり、  N- (1〜を含む  n-は)、少なくとも一つの存在は整数を繰り返すことを見出しました。それだけの一意の整数を想定すると、繰り返しの数を見つけます。

例1:

入力:[1,3,4,2,2]
出力:2

例2:

入力:[3,1,3,4,2] 
出力:3

説明:

  1. あなたは、(配列が読み取り専用であることを仮定して)元の配列を変更することはできません。
  2. 唯一の余分な使用  Oのスペースを(1)。
  3. それはの時間複雑未満の  ON- 2)。
  4. 唯一の重複数字の配列が、それを複数回繰り返してもよいです。

 

 

被験者の分析は、N + 1アレイのサイズに、アレイは、1-nの間からであり、私たちの質問ルールのこの半分は次のようにします:

  1. 1つの左点、右点N、中央値は、左の中間点であります
  2. 与えるために、ハーフ、ミッド
  3. 番号の出現回数を反復し、少ない半ばを求めます
  4. 数が中間よりも大きい場合、中間、R =半ばを保持するために、このサーチ範囲において、この範囲内で、過剰な数の証明
  5. そうでない場合は、廃棄半ば、L =ミッド+1

 

ACコード:

クラスソリューション{
     公共 のint findDuplicate(INT [] NUMS){
         int型のn = nums.length - 1 int型の L = 1 INT R = N。
        一方、(L < R){
             int型 1 >>>ミッド=(L + R) int型のカウント= 0 ;
            以下のためにint型 ; iはnums.length <I ++は、I = 0 ){
                 場合(NUMS [I] <= MID)カウント++ 
            } 
            であれば(カウント> MID){ 
                R =ミッド; 
            } { 
                L =ミッド+ 1 
            } 
        } 
        戻りL。
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11427411.html