首页 > 代码库 > Leetcode: Find Minimum in Rotated Sorted Array II
Leetcode: 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 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。