public static int minNumberInRotateArray(int[] array){
int len=array.length;
if(len==0){
return 0;
}
//采用二分查找
int left=0,right=len-1;
while(left<right){
int mid=left+(right-left)/2;
//类似[3,4,5,6,0,1,2],此时最小数字一定在mid的右边。
if(array[mid]>array[right]){
left=mid+1;
}
//类似 [1,0,1,1,1] 或者[1,1,1,0,1],此时最小数字不好判断在mid左边,还是右边,这时只好一个一个试
else if(array[mid]<array[right]){
right=mid;
}
//类似[2,2,3,4,5,6,6],此时最小数字一定就是array[mid]或者在mid的左边。因为右边必然都是递增的
else{
right=right-1;
}
}
return array[left];
}
京公网安备 11010502036488号