アレイの回転の最小数:配列

タイトル説明

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

問題解決のためのアイデア

バイナリ検索を使用します。

int型高= arr.length - 1。

int型の低= 0;

INT半ば=ロー+(高 - 低)/ 2。

私たちは3例を考慮する必要があります。

  1. 場合[中間] ARR> [hjgh] ARR、それは場合であってもよい:[3、4、5、6、0、1、2]、最小値は右半ばにある必要があり、低=ミッド+ 1。
  2. 場合ARR [中間] <ARR [高]場合には、同様の配列[2,2,3,4,5,6,6]、次に必ずしも最小数の配列[中間]または中間左、右ため必ずしも全てインクリメント、高い=半ばです。
  3. 配列[中間] == [高]配列は、[1,0,1,1,1]または[1,1,1,0,1]同様のアレイは、次いで、最小数か左半ばに判定された場合、場合右に、そして私たちが持っていたテスト、高い=高 - 1。

参照コード

1つの パブリック クラスソリューション{
 2      公共 INT minNumberInRotateArray(INT []配列){
 3          であれば(Array.lengthと== 0 ){
 4              戻り 0 ;
5          }
 6          INT = 0低く7          INTハイ= Array.lengthと- 1 8          一方(低< 高){
 9              INTミッド=ロー+(高-低)/ 2 10              であれば(配列[中間]> 配列[高]){
 11                  ロー=ミッド+ 1 12              } そう であれば(配列[中間] < 配列[高]){
 13                  高= ミッド。
14              } {
 15                  高=高- 1 16              }
 17          }
 18          リターン・アレイ[低]。
19      }
 20 }

 

おすすめ

転載: www.cnblogs.com/carry6/p/11516859.html
おすすめ