Table of Contents
Find Minimum in Rotated Sorted Array
Logic
Please read normal Binary search code for finding target and its comparison with rotated array.
This will help to build foundation.
Problem Statement
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 rotated4
times.[0,1,2,4,5,6,7]
if it was rotated7
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
of unique elements, return the minimum element of this array.
You must write an algorithm that runs in O(log n) time
.
Example 1:
Input: nums = [3,4,5,1,2] Output: 1 Explanation: The original array was [1,2,3,4,5] rotated 3 times.
Example 2:
Input: nums = [4,5,6,7,0,1,2] Output: 0 Explanation: The original array was [0,1,2,4,5,6,7] and it was rotated 4 times.
Example 3:
Input: nums = [11,13,15,17] Output: 11 Explanation: The original array was [11,13,15,17] and it was rotated 4 times.
Constraints:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
- All the integers of
nums
are unique. nums
is sorted and rotated between1
andn
times.
Golang Solution
func findMin(nums []int) int {
n := len(nums)
left, right := 0, n-1
// Check which part of the array to search
for left < right {
middle := left + (right-left)/2
// Minimum must be in the right half
if nums[middle] > nums[right] {
left = middle+1
} else {
// Minimum is in the left half or at middle
right = middle
}
}
// The left pointer will point to the minimum
return nums[left]
}
Output
Input
nums = [3,4,5,1,2]
Output
1
Please visit https: https://codeandalgo.com for more such contents
Leave a Reply