6.アレイの回転の最小数は、安全の提供を証明します

6.アレイの回転の最小数

タイトル説明

いくつかの要素の配列の先頭には、配列、我々は回転呼んで配列の最後に移動しました。
出力回転最小の素子アレイの回転の入力配列の非降順。
例えば、配列{3,4,5,1,2}、{1,2,3,4,5}は最小のアレイの回転です。
注:配列のサイズは、リターン0 0である場合、すべての要素は、0よりも大きいに記載されています。

アクトワン:

検索暴力

; java.util.ArrayListのインポートの
 パブリック クラスソリューション{
     公共 のint minNumberInRotateArray(INT []配列){
         // 、前に記録された値よりも大きい値の位置の走査を終了する開始
        IF(BE Array.lengthと<= 0 戻り 0 ; 
        
        INT J = 0 ; Jが<Array.lengthとすること- 。1 ; J ++ ){
             IF(配列[J + 1 ] < 配列[J]){
                 戻り配列[J + 1 ]; 
            } 
        } 
        戻り 0; 
    } 
}

 

アクトII:

変形二分法の使用

分析:バイナリサーチ変種、比較するための具体的な値はありません。次に、配列を増減に表示するための中間値と低いビット、狭い操作と比べ。

単位で1:移動低

減少で2:ハイダウン(もしそうならhigh-1、あなたは、最小を見逃す可能性を探していることは最小であるため)

3.残り例:低++狭い範囲

 

 

特殊なケース:

キャプション

 

1  java.util.ArrayListの輸入;
 2  パブリック クラスソリューション{
 3      公共 INT minNumberInRotateArray(INT []配列){
 4          // 前の位置の値よりも値の大きい記録に、走査を終了する開始
5。         IF(BE Array.lengthと<= 0 。6              戻り 0 ;
 7。         // 変性バイナリサーチ
8。         INT低= 0、=高はArray.lengthとすること- 1。;
 9          INT MID;
 10          一方(低< 高){
 11              MID =(高-低)/2 + 低いです。
12              であれば(配列[低] < 配列[高])
 13                  リターン・アレイ[低]。
14              であれば(配列[中間]> 配列[低]){
 15                  ロー=ミッド+ 1 16              } そう であれば(配列[中間] < 配列[高]){
 17                  高= ミッド。
18              } {
 19                  低++ 20              }
 21          }
 22         リターン・アレイ[低]。
23     }
 24 }

 

おすすめ

転載: www.cnblogs.com/hi3254014978/p/12465277.html
おすすめ