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.
You may assume no duplicate exists in the array.
二分查找就行了。
1 class Solution { 2 public: 3 int findMin(vector<int> &arr) { 4 if (arr.empty()) return -1; 5 int l = 0, h = arr.size() - 1, m, min = INT_MAX; 6 while (l <= h) { 7 m = l + (h - l) / 2; 8 if (arr[m] >= arr[l]) { 9 if (min > arr[l]) min = arr[l]; 10 l = m + 1; 11 } else { 12 if (arr[m] < min) min = arr[m]; 13 h = m - 1; 14 } 15 } 16 return min; 17 } 18 };
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 findMin(vector<int> &arr) { 4 if (arr.empty()) return -1; 5 int l = 0, h = arr.size() - 1, m, min = INT_MAX; 6 while (l <= h) { 7 m = l + (h - l) / 2; 8 if (arr[m] > arr[l]) { 9 if (min > arr[l]) min = arr[l]; 10 l = m + 1; 11 } else if (arr[m] < arr[l]) { 12 if (arr[m] < min) min = arr[m]; 13 h = m - 1; 14 } else { 15 if (arr[m] < min) min = arr[m]; 16 l++; 17 } 18 } 19 return min; 20 } 21 };