思路
- 初始化两个指针
left
,right
分别指向数组首尾; - 开始二分搜索,求
mid
,然后和right位置的数字进行比较;- 若
nums[mid]
大于nums[right]
,则说明最小值在mid
右侧,那么左边界left = mid + 1
; - 若
nums[mid]
小于nums[right]
,则说明最小值在mid
左侧,那么右边界right = mid
; - 若
nums[mid]
等于nums[right]
,那么右边界左移,right --
;
- 若
class Solution {
public int minArray(int[] numbers) {
int left = 0;
int right = numbers.length - 1;
int mid;
while(left < right){
mid = left + (right - left)/2;
if(numbers[mid] > numbers[right]){
left = mid + 1;
}else if(numbers[mid] > numbers[right]){
right = mid;
}else{
right --;
}
}
return numbers[left];
}
}