153. Find Minimum in Rotated Sorted Array

Problem:

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.

Example 1:

Input: [3,4,5,1,2] 
Output: 1

Example 2:

Input: [4,5,6,7,0,1,2]
Output: 0

Solutions:

class Solution {
public:
    typedef bool (*check)(vector<int>&, int index);

    static bool checkMin(vector<int>& nums, int index) {
        return nums[index] < nums[0];
    }

    int findMin(vector<int>& nums) {
        if (nums.size() == 0)   return -1;
        if (nums.size() == 1)   return nums[0];
        if (nums[0] < nums.back())  return nums[0];
        int left = 0;
        int right = nums.size() - 1;
        while (left < right) {
            int mid = left + (right - left)/2;
            if (checkMin(nums, mid)) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }

        return nums[left];
    }
};

results matching ""

    No results matching ""