YSMull
<-- algorithm



原题链接

这道 hard 不会套模板,先这样吧。

class Solution {
    public int findMin(int[] nums) {
        int i = 0;
        int j = nums.length - 1;
        if (nums[i] < nums[j]) return nums[i];
        while (true) {
            while (nums[i] == nums[j] && i < j) {
                i++;
            }
            if (nums[i] < nums[j]) return nums[i];
            if (i == j || i == j - 1) return nums[j];

            int mid = (i + j) / 2;
            int n = nums[mid], l = nums[i], r = nums[j];
            
            if (n == l) {
                i = mid;
                continue;
            }

            if (n > l) { // n 在上方
                if (nums[mid+1] >= nums[mid]) {
                    i = mid + 1;
                } else {
                    return nums[mid + 1];
                }
            } else { // n 在下方
                if (nums[mid] >= nums[mid - 1]) {
                    j = mid - 1;
                } else {
                    return nums[mid];
                }
            }
        }
    }
}