https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/
有一个递增的旋转数组,找出最小值。
个人习惯写二分算法时,while的条件为low<=high,加等号。这是第一道遇到的不能加等号的题目。
需要首先处理特殊情况,就是本身有序的情况,如果a[low] <= a[high],说明本身有序,直接返回a[low]即可,否则二分查找。
当a[m]>a[high]时,说明m在左侧,这时铁定需要找[m+1,high],否则,需要找[low, m],注意一个是m+1,一个是m,最后返回的是a[low],找特值判断即可。
代码:
public int findMin(int[] nums) {
if(nums[0] <= nums[nums.length - 1])
return nums[0];
int low = 0, high = nums.length - 1;
while(low < high){
int m = (low + high) / 2;
if(nums[m] > nums[high])
low = m + 1;
else
high = m;
}
return nums[low];
}