https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
Note: This is the version that “may contain duplicates”, but solution is same as 153.

1. Use binary search:

  1. //12 ms 12.3 MB
  2. class Solution {
  3. public:
  4. int findMin(vector<int>& nums) {
  5. if(nums.empty()) return -1;
  6. return findMin(nums, 0, nums.size()-1);
  7. }
  8. private:
  9. int findMin(vector<int>& nums, int l, int r) {
  10. if(l == r)
  11. return nums[l];
  12. if(l+1 == r)
  13. return min(nums[l], nums[r]);
  14. //sorted in ascending order, num[l] is minimum
  15. if(nums[l] < nums[r])
  16. return nums[l];
  17. int median = l + (r - l) /2;
  18. return min(findMin(nums, l, median - 1), findMin(nums, median, r));
  19. }
  20. };