11.アレイの回転の最小数は安全オファーを証明します

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
パブリック クラス   { 公共のint minNumberInRotateArray INT []配列) { int型のインデックス1 = 0int型 INDEX2 = Array.lengthと- 1int型 indexMid = 0 ;





もし(Array.lengthと== 0){ 戻り0 ; }



一方、(配列[index1の]> =配列[INDEX2]){ 場合(INDEX2 - == index1の1){ indexMid = INDEX2。破ります ; }





indexMid =(index1の+ INDEX2)/ 2

あれば(配列[index1の] ==配列[indexMid] &&配列[indexMid] ==配列[INDEX2]){ 戻り minSequentialSearch(アレイ)。 }



もし(配列[indexMid]> =配列[index1の]){
index1の= indexMid。
} そう であれば(配列[indexMid <=配列[INDEX2]){
INDEX2 = indexMid。
}
}

リターン・アレイ[indexMid]。
}

プライベート INT minSequentialSearch INT []配列) { int型 indexMin = 0以下のために int型 I = 1 ; I <Array.lengthと; iは++){もし(配列[I] <配列[indexMin]){ indexMin = I。 } }







リターン・アレイ[indexMin]。
}
}

時間複雑

時間の複雑さは、対数レベルの$ O(logN個)$です。

解決策2 [Javaの]:時間複雑性の$ O(N / 2)$

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
パブリック クラス   { 公共のint minNumberInRotateArray INT []配列) { 場合(Array.lengthと== 0){ 戻り0 ;         }





INT分=配列[ 0 ]。

以下のためにint型 I = 1 ; I <Array.lengthと; ++ I){ もし(配列[I] <分){ 戻り配列[i]は、 } }





戻り分。
}
}

考え

回転後、常に数字のセットを見つける二つの隣接する数字の右の比較左から、最初の数は、第二の数が最小である、第二の数よりも大きいです。秒数であるため、操作のすべての後続の回転数は、一連の数字の最後に移動します。

オリジナル:ビッグボックスは  安全性11に配列オファーを回転の最小数を証明します


おすすめ

転載: www.cnblogs.com/chinatrump/p/11597040.html
おすすめ