LeetCode Problem

154. Find Minimum in Rotated Sorted Array II Link to LeetCode Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become: - [4,5,6,7,0,1,2] if it was rotated 4 times. - [0,1,2,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. Example 1: Input: nums = [1,3,5] Output: 1 Example 2: Input: nums = [2,2,2,0,1] Output: 0 Analysis We only need to add one more condition, which checks if the left-most element and the right-most element are equal. If they are we can simply drop one of them. In my solution below, I drop the left element whenever the left-most equals to the right-most. class Solution { public int findMin(int[] nums) { int start = 0, end = nums.length-1; while (start < end) { int mid = start + (end - start) / 2; if (nums[mid] > nums[end]) { start = mid+1; } else if (nums[mid] < nums[end]) { end = mid; } else { end--; } } return nums[end]; } }