Find Minimum in Rotated Sorted Array II (Duplicates)
Same as Find Minimum in Rotated Sorted Array but the array may contain duplicates. Return the minimum element.
Example 1
Input: [1,3,5] → Output: 1
Example 2
Input: [2,2,2,0,1] → Output: 0
Solution Approach
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).
Java
class Solution {
public int findMin(int[] nums) {
int lo = 0, hi = nums.length - 1;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (nums[mid] > nums[hi]) lo = mid + 1;
else if (nums[mid] < nums[hi]) hi = mid;
else hi--;
}
return nums[lo];
}
}
- Time Complexity: O(N) worst case (all duplicates), O(log N) average
- Space Complexity: O(1)