Skip to main content

Find Minimum in Rotated Sorted Array II

Problem

Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,4,4,5,6,7] might become:

  • [4,5,6,7,0,1,4] if it was rotated 4 times.
  • [0,1,4,4,5,6,7] if it was rotated 7 times.

Notice that rotating an array [a[0], a[1], a[2], ..., a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], ..., a[n-2]].

Given the sorted rotated array nums that may contain duplicates, return the minimum element of this array.

You must decrease the overall operation steps as much as possible.

Solution Approach

Expected Time Complexity: O(n)O(n)

Click - to see solution code
class Solution {
public:
int findMin(vector<int>& nums) {
int start = 0, end = nums.size()-1;
while(start < end){
int mid = (start + end)/2;
if(nums[mid] >= nums[start] && nums[end] < nums[mid]){
start = mid + 1;
}else if(nums[mid] >= nums[start] && nums[end] == nums[mid]){
end -= 1;
}else{
end = mid;
}
}
return nums[start];
}
};