【力扣刷题|第五天作业】二分查找-寻找旋转排序数组中的最小值 II
寻找旋转排序数组中的最小值 II
力扣题目网址:寻找旋转排序数组中的最小值 II
这道题和寻找153题很相似,但是这道题我们跟数组最后一个数比较的时候,我们不能确定这个数是在最小值的左边还是在最小值的右边,例如数组
3 3 3 3 1 3 3
和3 1 3 3 3 3 3
我们第一取 mid 的时候他是3,而最后一个数也是3,那么我们该判断他是在左边还是右边呢。这时候我们可以舍弃最后一个数,继续二分。如果他是最小值,mid等于最后一个数,说明最小值还在剩下的数组当中,如果不是最小值,我们排除了一个数。
class Solution {public int findMin(int[] nums) {int left = 0, right = nums.length - 2;int end = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if(nums[mid] > nums[right+1]) {left = mid + 1;}else if(nums[mid] < nums[right+1]) {right = mid - 1;}else {right --;}}return nums[left];}
}