Find Minimum in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
0 1 2 4 5 6 7might become4 5 6 7 0 1 2).Find the minimum element.
You may assume no duplicate exists in the array.
Show Similar Problems
Force solution, o(n) AC
//will it contains negatives?
//Could the array not rotated? Just an ordinary sorted array?
//What's the complexity requirements? O(n^2) O(logn)?
//Does sorted array means increasing array?
//Can I manipulate the input?
class Solution {
public:
int findMin(vector<int>& nums) {
int min = nums[0];
for(int i = 0; i < nums.size(); i++){
min = min < nums[i] ? min: nums[i];
}
return min;
}
};

Binary search o(logn)
//will it contains negatives?
//Could the array not rotated? Just an ordinary sorted array?
//What's the complexity requirements? O(n^2) O(logn)?
//Does sorted array means increasing array?
//Can I manipulate the input?
class Solution {
public:
int findMin(vector<int>& nums) {
//suppose the nums.size() > 0
//extreme cases
if(nums.size() == 1) return nums[0];
return _findMin(nums, 0, nums.size());
}
//[start, end)
int _findMin(vector<int>& nums, int start, int end){
//base condition
if(end - start == 1){
return nums[start];
}
//pivot is not between start and end
if (nums[start] < nums[end - 1]) return nums[start];
//ordinary condition
int mid = (start + end) / 2;
if(nums[mid] > nums[start]){
return _findMin(nums, mid + 1, end);
}
else{
return _findMin(nums, start + 1, mid + 1);//be careful!
}
}
};