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 Solution {
public:
int find(vector<int> num, int begin, int end)
{
int res = num[begin];
for(int i = begin+1; i <= end; i++)
if(res > num[i]) res = num[i];
return res;
}
int binarySearch(vector<int> num, int begin, int end)
{
if(begin == end) return num[begin];
if(num[begin] < num[end])
return num[begin];
else if(num[begin] == num[end])
return find(num, begin, end);
else{
int mid = begin + (end - begin)/2;
if(num[begin] < num[mid])
return binarySearch(num, mid+1, end);
else if(num[begin] > num[mid])
return binarySearch(num, begin, mid);
else
return find(num, mid, end);
}
}
int findMin(vector<int> &num) {
return binarySearch(num, 0, num.size()-1);
}
};int find(vector<int> num, int begin, int end)
{
int res = num[begin];
for(int i = begin+1; i <= end; i++)
if(res > num[i]) res = num[i];
return res;
}
int findMin(vector<int> &num) {
int begin = 0, end = num.size()-1;
if(num[begin] < num[end]) return num[begin];
while(begin <= end)
{
if(begin == end) return num[begin];
if(num[begin] < num[end])return num[begin];
else if(num[begin] == num[end])
return find(num, begin, end);
else{
int mid = begin + (end - begin)/2;
if(num[begin] < num[mid])
begin = mid + 1;
else if(num[begin] > num[mid])
end = mid;
else
return find(num, mid, end);
}
}
}
Leetcode: Find Minimum in Rotated Sorted Array II
原文地址:http://blog.csdn.net/doc_sgl/article/details/42647113