题目来源:
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/
题目描述:
代码如下:
class Solution {
public int findMin(int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int left = 0;
int right = nums.length - 1;
// 第一个数小于最后一个数,说明是完全升序
if (nums[left] < nums[right])
return nums[left];
int mid = 0;
while (left <= right) {
mid = left + (right - left) / 2; // 需要保证不能 int 相加出现溢出
// 让中位数和右边的数字比较
if (nums[mid] > nums[right]) {
left = mid + 1;
}
// 如果 end = middle-1 的话,不能通过 {3,1,2}
else if (nums[mid] < nums[right]) {
right = mid;// 因为这里的 end 可能就是最小值,不能加一
}
// 如果中间和最后相等。怎么查找,主要前后移动方向不确定
// 无法确定的时候,让 右边的值自减就好了
else {
right--;
}
}
return nums[left];
}
}