Find Minimum in Rotated Sorted Array
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.
Solution: Binary Search
The idea is to find the unsorted half.
int findMin(vector<int>& nums) {
int left = 0, right = nums.size()-1;
while (left < right) {
// if the first member is less than the last member, there’s no rotation in the array.
// So we could directly return the first element in this subarray.
if (nums[left] < nums[right]) return nums[left];
// If value of the element in the middle is larger than the first element
// we know the rotation is at the second half of this array.
// Else, it is in the first half in the array.
int mid = left + (right - left)/2;
if (nums[mid] >= nums[left]) {
left = mid+1;
} else {
right = mid;
}
}
return nums[left];
}