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