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.
class Solution {
public:
//(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
/*algorithm : variable Binary search
min is first element if it is normal ascending array
otherwise, min is at rotate pvot
time O(logn) space O(1)
test case:
1) 0
2) 0,1
3) 1,0
4) 3,4,0,1,2
5) 2,3,4,5,1
*/
int findMin(vector<int>& nums) {
int n = nums.size();
//no rotate scenario
if(nums[0] <= nums[n-1])return nums[0];
//rotate scenario
int l = 0,h = n-1; //[l,h]
while(l < h){
int m = l + (h-l)/2;
if(nums[m] >= nums[0])l = m+1; //min in second part
else h = m; //min in first part
}
return nums[l];
}
};