配列の回転数の最小値:証明安全offer8

タイトル説明

いくつかの要素の配列の先頭には、配列、我々は回転呼んで配列の最後に移動しました。
出力回転最小の素子アレイの回転の入力配列の非降順。
例えば、配列{3,4,5,1,2}、{1,2,3,4,5}は最小のアレイの回転です。
注:配列のサイズは0、リターン0である場合は、すべての要素は、0より大きいに記載されています。
 
 
C ++の実装:
{ソリューションクラス
パブリック:
    INT minNumberInRotateArray(ベクトル<整数> rotateArray){ 
        int型のサイズ= rotateArray.size(); 
        IF(サイズ== 0){ 
            ;戻り0 
        } 
        (サイズ== 1)IF { 
            [0] rotateArrayを返します。
        } 
        INTフロント= 0、サイズ= -REAR 1; 
        
        INT = MIDフロント; 
        一方(rotateArray [フロント]> = rotateArray [REAR]){ 
            IF(REAR - ==フロント1){   //ループ終了条件 
                BREAK; 
            } 
            MID =(前後+)/ 2; 
            IF(rotateArray [フロント] == rotateArray [MID] && rotateArray [MID] == rotateArray [REAR]){ //頭部、中央及び尾全て同じ一のトラバースずつ解決すべき最小
                
                リア= findmin(rotateArray、フロント、リア)。
                ブレーク; 
            } 
            IF(rotateArray [中間]> = rotateArray [フロント]){ 
                正面=ミッド。
            }(rotateArray [中間] <= rotateArray [リア]){もしそう
                後部=ミッド。
            } 
            半ば=(フロント+リア)/ 2。
        } 
        rotateArray [リア]を返します。
    } 
    int型findmin(CONSTベクター<整数>&rotateArray、int型のフロント、リアINT){ 
        int型min_pos =フロント。
        以下のために(INT I =フロント+ 1; iは<=背面; iは++){ 
            IF(rotateArray [min_pos]> rotateArray [I]){ 
                min_pos = I。
            } 
        }
        rotateArray [min_pos]を返します。
    } 
}。                

  

おすすめ

転載: www.cnblogs.com/fancy-li/p/11610314.html