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.
The array may contain duplicates.
Example 1:
Input: [1,3,5]
Output: 1
Example 2:
Input: [2,2,2,0,1]
Output: 0
Note:
This is a follow up problem to Find Minimum in Rotated Sorted Array.
Would allow duplicates affect the run-time complexity? How and why?
public int findMin(int[] nums) {
if(nums[nums.length - 1] > nums[0]) return nums[0];
int l = 0;
int r = nums.length - 1;
while(l < r){
if(r - l == 1) return nums[r];
int mid = l + (r - l) / 2;
if(nums[mid] == nums[l] && nums[mid] == nums[r]) return searchInSort(nums,l,r);
if(nums[mid] >= nums[l]) l = mid;
else r = mid;
}
return nums[l];
}
private int searchInSort(int[] nums, int start, int end){
int min = nums[start];
for(int i = start; i <= end; i++){
if(nums[i] < min){
min = nums[i];
}
}
return min;
}