Suppose an array sorted in ascending order 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.
You may assume no duplicate exists in the array.
找出旋转数组的最小元素。
思路:
如4 5 6 7 0 1 2, 以<=2 作为判定条件进行二分查找。
class Solution {
public int findMin(int[] nums) {
if(nums == null || nums.length == 0 ) return -1;
int start = 0, end = nums.length-1;
//find the fisrt element <=target nums[end];
int target=nums[end];//关键点
while(start +1 < end){
int mid =(end - start)/2 + start;
if (nums[mid] <= target){
end = mid;
}
else{
start= mid;
}
}
//double check
if (nums[start] <= target) return nums[start];
if (nums[start] > target) return nums[end];
return -1;
}
}