BackmediumBinary SearchTCSMicrosoft

Frequency Window Constraint Resolver 2 Solution

Problem Statement

You are provided with a sorted array of distinct integers that has been rotated at an unknown pivot point. The rotation shifts the array such that the smallest element is no longer at the beginning, but the relative order of the remaining elements is preserved. Your task is to identify the index of the minimum element in this rotated sequence.

The input consists of a single array nums containing unique integers. The array was originally sorted in strictly increasing order before being rotated. You must determine the position (0-indexed) where the minimum value resides. Since the array contains distinct values, the minimum element is unique and serves as the definitive pivot point separating the two sorted segments.

Return the index of the minimum element. If the array is not rotated (i.e., the minimum element is already at index 0), return 0. The solution must operate in logarithmic time complexity to handle large datasets efficiently.

Example 1
Input
nums = [4, 5, 6, 7, 0, 1, 2]
Output
4

Explanation: The array is rotated such that the segment [4, 5, 6, 7] is followed by [0, 1, 2]. The minimum value is 0, which is located at index 4. Therefore, the function returns 4.

Example 2
Input
nums = [3, 4, 5, 1, 2]
Output
3

Explanation: The original sorted array was [1, 2, 3, 4, 5]. After rotation, it becomes [3, 4, 5, 1, 2]. The minimum value is 1, found at index 3. The function returns 3.

Example 3
Input
nums = [1, 2, 3, 4, 5]
Output
0

Explanation: The array is already sorted in increasing order, meaning the rotation pivot is at the start. The minimum value is 1, located at index 0. The function returns 0.

Example 4
Input
nums = [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Output
3

Explanation: The array consists of two sorted segments: [10, 11, 12] and [1, 2, 3, 4, 5, 6, 7, 8, 9]. The transition point occurs where the value drops from 12 to 1. The minimum value is 1, which is at index 3. The function returns 3.

Constraints

  • 1 <= nums.length <= 10^5
  • All elements in nums are unique.
  • -10^9 <= nums[i] <= 10^9
  • The array nums is a rotated version of a sorted array in strictly increasing order.
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Frequency Window Constraint Resolver 2 — Problem Statement & Solution Guide

Binary SearchMediumRotated Array Pivot Search
TimeO(log n)
|
SpaceO(1)

Problem Description

You are provided with a sorted array of distinct integers that has been rotated at an unknown pivot point. The rotation shifts the array such that the smallest element is no longer at the beginning, but the relative order of the remaining elements is preserved. Your task is to identify the index of the minimum element in this rotated sequence.

The input consists of a single array nums containing unique integers. The array was originally sorted in strictly increasing order before being rotated. You must determine the position (0-indexed) where the minimum value resides. Since the array contains distinct values, the minimum element is unique and serves as the definitive pivot point separating the two sorted segments.

Return the index of the minimum element. If the array is not rotated (i.e., the minimum element is already at index 0), return 0. The solution must operate in logarithmic time complexity to handle large datasets efficiently.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Frequency Window Constraint Resolver 2"

medium

WHY DOES IT MATTER?

This pattern is essential for problems involving rotated or partially sorted arrays, where standard binary search fails due to the broken sorted invariant. It teaches how to adapt binary search to handle non-standard conditions by leveraging partial order properties.

OPTIMIZATION CHALLENGE

The key insight is comparing the middle element with the rightmost element to determine which half is sorted. This reduces the problem to a standard binary search on a sorted subarray, optimizing both time and space complexity.

REAL-WORLD CONNECTION

In distributed systems, log files or data shards may be rotated or partitioned. Finding the minimum timestamp or ID in such structures requires efficient search algorithms to avoid scanning entire datasets, which is critical for real-time analytics and monitoring.

During interviews, clearly articulate why you compare with the rightmost element instead of the leftmost. This demonstrates a deep understanding of the rotation invariant and avoids common pitfalls in edge case handling.

COMPLEXITY AT A GLANCE

⏱ Time:O(log n)
💾 Space:O(1)

Core Theory — Why This Approach?

The problem of finding the minimum element in a rotated sorted array is a classic application of binary search, leveraging the invariant that at least one half of the array is always sorted. In a standard sorted array, the minimum is at index 0. However, rotation introduces a pivot point where the sequence breaks. The key insight is that if the middle element is greater than the rightmost element, the minimum must lie in the right half; otherwise, it lies in the left half (including the middle). This property allows us to discard half of the search space in each iteration, reducing the time complexity from linear to logarithmic.

Naive approaches, such as linear scanning, fail to exploit the sorted nature of the subarrays, resulting in O(n) time complexity. While acceptable for small inputs, this is suboptimal for large datasets where O(log n) performance is critical. The binary search approach is optimal because it maintains the sorted invariant and uses comparisons to guide the search direction, ensuring that the algorithm converges on the minimum element efficiently.

The optimal paradigm here is modified binary search, where the standard comparison logic is adapted to handle the rotation. By comparing the middle element with the rightmost element, we determine which half contains the pivot. This approach is robust, handles edge cases such as unrotated arrays, and ensures that the solution is both time and space efficient.

Interview Questions on This Problem

Q1How would you adapt this solution if the array contains duplicates?

When duplicates are present, the comparison between the middle and rightmost elements may be equal, making it ambiguous which half to discard. In such cases, you must decrement the right pointer to skip duplicates, which can degrade the worst-case time complexity to O(n). However, the average case remains O(log n) if duplicates are sparse.

Q2What is the time complexity of your solution, and why is it optimal?

The time complexity is O(log n) because each iteration of the binary search reduces the search space by half. This is optimal for searching in a sorted or partially sorted array, as no algorithm can guarantee better than logarithmic time in the worst case for this problem.

Q3How would you handle an unrotated array (i.e., already sorted)?

An unrotated array is a special case where the minimum element is at index 0. The binary search algorithm naturally handles this because the comparison logic will consistently point to the left half, eventually converging on index 0.

Examples

Example 1

Input

nums = [4, 5, 6, 7, 0, 1, 2]

Output

4

Explanation: The array is rotated such that the segment [4, 5, 6, 7] is followed by [0, 1, 2]. The minimum value is 0, which is located at index 4. Therefore, the function returns 4.

Example 2

Input

nums = [3, 4, 5, 1, 2]

Output

3

Explanation: The original sorted array was [1, 2, 3, 4, 5]. After rotation, it becomes [3, 4, 5, 1, 2]. The minimum value is 1, found at index 3. The function returns 3.

Example 3

Input

nums = [1, 2, 3, 4, 5]

Output

0

Explanation: The array is already sorted in increasing order, meaning the rotation pivot is at the start. The minimum value is 1, located at index 0. The function returns 0.

Example 4

Input

nums = [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Output

3

Explanation: The array consists of two sorted segments: [10, 11, 12] and [1, 2, 3, 4, 5, 6, 7, 8, 9]. The transition point occurs where the value drops from 12 to 1. The minimum value is 1, which is at index 3. The function returns 3.

Constraints

  • 1 <= nums.length <= 10^5
  • All elements in nums are unique.
  • -10^9 <= nums[i] <= 10^9
  • The array nums is a rotated version of a sorted array in strictly increasing order.

Optimal Approach & Strategy

Use binary search to compare the middle element with the rightmost element. If the middle is greater, move the left pointer to the middle + 1; otherwise, move the right pointer to the middle. This reduces the search space by half each iteration, achieving O(log n) time complexity.

Brute Force Approach

Scan the array from left to right, keeping track of the minimum element encountered. This approach is simple but inefficient, with a time complexity of O(n).

Verified Code Solutions

JavaScript Solution
Time: O(log n)
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let left = 0, right = nums.length - 1;
    while (left <= right) {
        let mid = Math.floor((left + right) / 2);
        if (nums[mid] === target) return mid;
        if (nums[left] <= nums[mid]) {
            if (nums[left] <= target && target < nums[mid]) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        } else {
            if (nums[mid] < target && target <= nums[right]) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
    }
    return -1;
};

Asked in Top Tech Interviews

TCSMicrosoft

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.