154. Find Minimum in Rotated Sorted Array II

1.問題

2.想法

  • 提問:

  • function header, parameter

  • test input

  • 說明想法

    • 用binary search

    • 如果left < mid, 表示左半邊已排序

      • 拿最小值與最左值比較, 並繼續搜尋右邊

    • 如果left > mid, 表示右半邊未排序

      • 拿最小值與最左值比較, 並繼續搜尋左邊

3.程式碼

  • while loop

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

Last updated