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