找到第一个数值减少的那个数就可以了:时间复杂度O(n)
class Solution {
public int minArray ( int [ ] numbers) {
for ( int i = 0 ; i < numbers. length - 1 ; i++ ) {
if ( numbers[ i] > numbers[ i + 1 ] ) {
return numbers[ i + 1 ] ;
}
}
return numbers[ 0 ] ;
}
}
最优的方法,二分查找的思路:O(logn)
class Solution {
public int minArray ( int [ ] numbers) {
if ( numbers[ 0 ] < numbers[ numbers. length - 1 ] ) {
return numbers[ 0 ] ;
}
if ( numbers[ 0 ] == numbers[ numbers. length - 1 ] ) {
return searchInorder ( numbers) ;
}
int x = 0 ;
int y = numbers. length - 1 ;
int mid;
while ( x + 1 < y) {
mid = ( x + y) / 2 ;
if ( numbers[ mid] >= numbers[ x] ) {
x = mid;
} else {
y = mid;
}
}
return numbers[ y] ;
}
public int searchInorder ( int [ ] numbers) {
for ( int i = 0 ; i < numbers. length - 1 ; i++ ) {
if ( numbers[ i] > numbers[ i + 1 ] ) {
return numbers[ i + 1 ] ;
}
}
return numbers[ 0 ] ;
}
}