标签:
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.
跟上一题一样,注意相等的情况要特殊考虑。
1 class Solution { 2 public: 3 int findMinHelper(vector<int> &num, int left, int right) { 4 int mid = (left + right) / 2; 5 if (mid == left || mid == right) { 6 return min(num[left], num[right]); 7 } 8 if (num[mid] < num[right]) { 9 return findMinHelper(num, left, mid); 10 } else if (num[mid] > num[right]) { 11 return findMinHelper(num, mid, right); 12 } else { 13 return findMinHelper(num, left, right - 1); 14 } 15 } 16 int findMin(vector<int> &num) { 17 return findMinHelper(num, 0, num.size() - 1); 18 } 19 };
或者:
1 class Solution { 2 public: 3 int findMinHelper(vector<int> &num, int left, int right) { 4 int mid = (left + right) / 2; 5 if (mid == left || mid == right) { 6 return min(num[left], num[right]); 7 } 8 if (num[mid] < num[right]) { 9 return findMinHelper(num, left, mid); 10 } else if (num[mid] > num[right]) { 11 return findMinHelper(num, mid, right); 12 } else { 13 int res = num[left]; 14 for (int i = left; i <= right; ++i) { 15 res = min(res, num[i]); 16 } 17 return res; 18 } 19 } 20 int findMin(vector<int> &num) { 21 return findMinHelper(num, 0, num.size() - 1); 22 } 23 };
[LeetCode] Find Minimum in Rotated Sorted Array II
标签:
原文地址:http://www.cnblogs.com/easonliu/p/4214080.html