Same as Find Minimum in Rotated Sorted Array but the array may contain duplicates. Return the minimum element.
Similar to version I but when nums[mid] == nums[hi] we cannot determine which half contains the minimum, so we decrement hi by 1.
- While lo < hi:
- If nums[mid] > nums[hi]: lo = mid + 1.
- Else if nums[mid] < nums[hi]: hi = mid.
- Else (nums[mid] == nums[hi]): hi-- (safely shrink).
- Time Complexity: O(N) worst case (all duplicates), O(log N) average
- Space Complexity: O(1)