class Solution { public: int findMin(vector<int> &num) { int L = 0, R = num.size() - 1; while (L < R && num[L] >= num[R]) { int mid= (L+R)/2; if (num[mid] > num[R]) { L = mid + 1; } else if (num[mid] < num[R]){ R = mid; } else { L++; } } return num[L]; } };
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: /** * @param num: the rotated sorted array * @return: the minimum number in the array */ int findMin(vector<int> &num) { // write your code here int lo = 0; int hi = num.size() - 1; while (lo < hi) { int mid = (lo + hi) / 2; if (num[mid] < num[hi]) { hi = mid; } else if (num[mid] > num[hi]) { lo = mid + 1; } else { hi--; } } return num[lo]; } };