153. Find Minimum in Rotated Sorted Array

1.問題

2.想法

  • 提問:

  • function header, parameter

  • test input

  • 說明想法

    • 用binary search

    • 如果left < mid, 表示左半邊已排序-> 左半邊的不看, mid = left

    • 如果left > mid, 表示右半邊未排序-> 右半邊的不看, mid = right

3.程式碼

  • while loop

class Solution {
public:
    int findMin(vector<int>& nums) {
        if (nums.size() == 0) {
            return 0;
        }
        
        int size = nums.size(), left = 0, right = size - 1;
        if (nums[left] > nums[right]) {
            while (left != (right - 1)) {
                int mid = (left + right) / 2;
                if (nums[left] < nums[mid]) {
                    left = mid;
                } else {
                    right = mid;
                }
            }
            return min(nums[left], nums[right]);
        }
        return nums[0];
    }
};
  • recursive

class Solution {
public:
    int findMin(vector<int>& nums) {
        if (nums.empty()) return 0;
        return search(nums, nums[0], 0, nums.size() - 1);
    }
private:
    int search(vector<int>& nums, int res, int left, int right) {
        if (left < right - 1) {
            int mid = (left + right) / 2;
            if (nums[left] < nums[mid]) {
                res = min(res, nums[left]);
                return search(nums, res, mid, right);
            } else {
                res = min(res, nums[right]);
                return search(nums, res, left, mid);
            }
        }
        res = min(res, nums[left]);
        res = min(res, nums[right]);
        return res;
    }
};

Last updated