Find Minimum in Rotated Sorted Array

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.

You may assume no duplicate exists in the array.

The idea is to find the unsorted half.

int findMin(vector<int>& nums) {
    int left = 0, right = nums.size()-1; 

    while (left < right) {
        // if the first member is less than the last member, there’s no rotation in the array. 
        // So we could directly return the first element in this subarray.
        if (nums[left] < nums[right]) return nums[left];

        // If value of the element in the middle is larger than the first element
        // we know the rotation is at the second half of this array. 
        // Else, it is in the first half in the array.
        int mid = left + (right - left)/2;
        if (nums[mid] >= nums[left]) {
            left = mid+1;
        } else {
            right = mid;
        }
    }

    return nums[left];
}

results matching ""

    No results matching ""