方法一:书上方法
class Solution {
public :
int minArray ( vector< int > & numbers) {
int index1 = 0 ;
int index2 = numbers. size ( ) - 1 ;
int indexMin = index1;
while ( numbers[ index1] >= numbers[ index2] )
{
if ( index2 - index1 == 1 )
{
indexMin = index2;
break ;
}
indexMin = ( index1 + index2 ) / 2 ;
if ( numbers[ index1] == numbers[ index2] && numbers[ index1] == numbers[ indexMin] )
return InOrder_Min ( numbers, index1, index2) ;
if ( numbers[ indexMin] >= numbers[ index1] )
{
index1 = indexMin;
}
else if ( numbers[ indexMin] <= numbers[ index2] )
{
index2 = indexMin;
}
}
return numbers[ indexMin] ;
}
private :
int InOrder_Min ( vector< int > & numbers, int index1, int index2)
{
int result = numbers[ index1] ;
for ( int i = index1 + 1 ; i <= index2; i++ )
{
if ( result > numbers[ i] )
result = numbers[ i] ;
}
return result;
}
} ;
方法二:二分搜索
class Solution {
public int minArray ( int [ ] numbers) {
int left = 0 , right = numbers. length - 1 ;
while ( left < right) {
int mid = left + ( right - left) / 2 ;
if ( numbers[ mid] < numbers[ right] ) {
right = mid;
} else if ( numbers[ mid] > numbers[ right] ) {
left = mid + 1 ;
} else {
right - = 1 ;
}
}
return numbers[ left] ;
}
}