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.
You may assume no duplicate exists in the array.
Solution 1:
public class Solution {
public int findMin(int[] nums) {
int lo=0, hi=nums.length-1;
while(lo<=hi){
int mid = lo + (hi-lo)/2;
if(nums[lo]<=nums[hi]){
break;
} else {
if(nums[mid]>=nums[lo]){
lo = mid + 1;
} else {
hi = mid;
lo = lo + 1;
}
}
}
return nums[lo];
}
}
Solution 2:
public class Solution {
public int findMin(int[] nums) {
int lo=0, hi=nums.length-1;
while(lo<hi){
int mid = (lo+hi)/2;
if(nums[mid]>nums[hi]) lo=mid+1;
else hi=mid;
}
return nums[lo];
}
}