タイトル説明
いくつかの要素の配列の先頭には、配列、我々は回転呼んで配列の最後に移動しました。
出力回転最小の素子アレイの回転の入力配列の非降順。
例えば、配列{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より大きいに記載されています。
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]を返します。 } }。