题目:
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?
代码:
class Solution {
public:
int helper(vector<int>& nums, int start, int end) {
if (start >= end)return nums[start];
int mid = start + (end - start) / 2;
if (nums[mid] > nums[end]) {
return helper(nums, mid + 1, end);
}
else if (nums[mid] < nums[end]) {
return helper(nums, start, mid);
}
else {
return min(helper(nums, start, mid-1 ), helper(nums, mid + 1, end));
}
}
int findMin(vector<int>& nums) {
int len = nums.size();
return helper(nums, 0, len - 1);
}
};