タイトル説明
いくつかの要素の配列の先頭には、配列、我々は回転呼んで配列の最後に移動しました。
出力回転最小の素子アレイの回転の入力配列の非降順。
例えば、配列{3,4,5,1,2}、{1,2,3,4,5}は最小のアレイの回転です。
注:配列のサイズは0、リターン0である場合は、すべての要素は、0より大きいに記載されています。
問題解決のためのアイデア
バイナリ検索を使用します。
int型高= arr.length - 1。
int型の低= 0;
INT半ば=ロー+(高 - 低)/ 2。
私たちは3例を考慮する必要があります。
- 場合[中間] ARR> [hjgh] ARR、それは場合であってもよい:[3、4、5、6、0、1、2]、最小値は右半ばにある必要があり、低=ミッド+ 1。
- 場合ARR [中間] <ARR [高]場合には、同様の配列[2,2,3,4,5,6,6]、次に必ずしも最小数の配列[中間]または中間左、右ため必ずしも全てインクリメント、高い=半ばです。
- 配列[中間] == [高]配列は、[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 }