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.
问旋转后的有序数列要多大的复杂度才能找到最小的数。
假设没有重复值的情况下,可以用简单二分解决,复杂度为log(2,n)
值有重复的情况下复杂度在 log(2,n) ~ n 之间
极端情况:n-1或n个数都相同时退化成O(n)的算法
class Solution {
public:
int findMin(vector<int>& nums)
{
int l = 0 , r = nums.size() - 1 , mid ;
while( l < r )
{
mid = ( l + r )>>1;
if(nums[mid] > nums[r])
l = mid+1;
else if(nums[mid] < nums[r])
r = mid;
else
r--;
}
return nums[l];
}
};