Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4
5 6 7 0 1 2
).
Find the minimum element.
Example
Given [4, 5, 6, 7, 0, 1, 2]
return 0
直接二分法查找。最终会有两种情况,即指针走到相邻位置,a,b中a大于b或者b大于a。a大于b时,取最左侧。反之,用if(nums[mid] >= nums[left]) left=mid+1跳过a。
public class Solution {
/**
* @param nums: a rotated sorted array
* @return: the minimum number in the array
*/
public int findMin(int[] nums) {
return helper(nums, 0, nums.length - 1);
}
int helper(int[] nums, int left, int right) {
while(left < right) {
if(nums[left] < nums[right]) return nums[left];
int mid = (left + right) / 2;
if(nums[mid] >= nums[left]) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left];
}
}