Find Minimum in Rotated Sorted Array

Leetcode#153

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 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 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 between 1 and n 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

Your email address will not be published. Required fields are marked *