题目:
分析:
- 我们以最右边的数x作为参考, 那么最小值右边的数, 一定是小于x的, 最小值左边的数, 一定是大于x的, 所以具有"二段性", 可以用二分查找算法
- 以示例一为例:
- 假设我们选择最后一个数据作为参考, 即2根据二分法取一个数据
- 如果这个数>2, 说明最小值一定在这个数的右边, 则让left = mid + 1
- 如果这个数<2, 说明最小值可能是这个数或者这个数左边的数, 则让right = mid
- 此时匹配二分查找算法的模版二, int mid = left + (right - left) / 2
代码:
class Solution {
public int findMin(int[] nums) {
int left = 0;
int right = nums.length-1;
int n = nums[right];
while(left < right){
int mid = left + (right - left) / 2;
if(nums[mid] < n) right = mid;
else left = mid + 1;
}
return nums[left];
}
}