DDSA Solutions

Sorted and Rotated Minimum

Advertisement

Intuition

Find minimum in sorted and rotated array. Binary search.

Algorithm

  1. 1If arr[mid] > arr[right]: min is in right half. Else min is in left half (including mid).

Common Pitfalls

  • Same as LC 153. O(log n). When no rotation: arr[0] is minimum. Handle duplicates carefully.
Sorted and Rotated Minimum.java
Java
// Approach: Binary search. Find the pivot; the element at pivot is the minimum.
// Time: O(log n) Space: O(1)
class Solution {
    public int findMin(int[] arr) {
        int i = 0;
        int j = arr.length - 1;
        int n = arr.length;

        while (i <= j) {
            int mid = (i + j) >> 1;
            int next = (mid + 1) % n;
            int prev = (mid + n - 1) % n;

            if (arr[mid] <= arr[next] && arr[prev] >= arr[mid])
                return arr[mid];
            else {
                if (arr[mid] < arr[j])
                    j = mid - 1;
                else
                    i = mid + 1;
            }
        }
        return -1;
    }
}
Advertisement
Was this solution helpful?