思路:二分法三种情况
1.如果mid>right,说明mid-right之间存在被旋转数组,left = mid+1
2.如果mid<right,说明mid右侧整体有序,最小的定在mid(包含)及其左边
3.如果mid=right,无法判断,只能缩小范围right --;
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int left = 0;
int right = array.length - 1;
while(left < right){
int mid = left + (right - left) / 2;
//说明mid-right为被旋转的部分,最小的应该在mid之前可能包含mid 561234
if(array[mid] < array[right]){
right = mid;
}
else if(array[mid] > array[right]){
left = mid + 1;
}
else{
right = right - 1;
}
}
return array[left];
}
} 


京公网安备 11010502036488号