Back to Leetcode Go

154. Find Minimum in Rotated Sorted Array II

website/content.en/ChapterFour/0100~0199/0154.Find-Minimum-in-Rotated-Sorted-Array-II.md

1.7.971.8 KB
Original Source

154. Find Minimum in Rotated Sorted Array II

Problem

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

Find the minimum element.

The array may contain duplicates.

Example 1:

Input: [1,3,5]
Output: 1

Example 2:

Input: [2,2,2,0,1]
Output: 0

Note:

Problem Summary

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (For example, the array [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2] ). Find the minimum element in it.

Note that the array may contain duplicate elements.

Solution Approach

  • Given an array that was originally sorted in ascending order, note that the array contains duplicate elements. However, at a certain split point, the two parts after splitting the array are swapped, placing the larger values at the front of the array. Find the minimum element in this array.
  • This problem is an enhanced version of Problem 153, adding the condition of duplicate elements. But the actual approach remains the same: still use binary search, with just one additional check for equal elements. The time complexity is O(log n).

Code

go

package leetcode

func findMin154(nums []int) int {
	low, high := 0, len(nums)-1
	for low < high {
		if nums[low] < nums[high] {
			return nums[low]
		}
		mid := low + (high-low)>>1
		if nums[mid] > nums[low] {
			low = mid + 1
		} else if nums[mid] == nums[low] {
			low++
		} else {
			high = mid
		}
	}
	return nums[low]
}