题目来源:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 点击打开链接
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
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.
The array may contain duplicates.
允许重复数字存在的情况
class Solution154{
public:
int findMin(vector<int>& nums){
int size = nums.size();
if (size == 0){
return 0;
}
else if (size == 1){
return nums[0];
}
else if (size == 2){
return min(nums[0], nums[1]);
}
int left = 0;
int right = size - 1;
while (left < right - 1){
if (nums[left] < nums[right]){
return nums[left];
}
int mid = (left + right) / 2;
if (nums[mid]>nums[left]){
left = mid + 1;
}
else if (nums[mid] < nums[left]){
right = mid;
}
else if (nums[mid] == nums[left]){
++left;
}
}
return min(nums[left], nums[right]);
}
};
int main()
{
Solution154 solution;
{
vector<int> vec = { 4, 5, 5, 6, 6, 6, 7, 0, 1, 2 };
cout << solution.findMin(vec);
}
system("pause");
return 0;
}