import java.util.*;


public class Solution {
    // 时间复杂度要求O(logn),使用二分查找
    // 因为数组原本是有序的,旋转之后,分为了两部分
    // 前面部分一定都大于后面部分
    // 这时使用二分查找,如果nums[mid]的值大于nums[right],则表示测试mid在前一部分,需要将left = mid + 1
    // 如果nums[mid] < nums[right],则表示mid在后面一部分,需要将right = mid;
    // 如果nums[mid] == nums[right],需要不断缩小right的值,来缩小氛围
    public int minNumberInRotateArray (int[] nums) {
        // write code here
        if(nums.length == 0) return 0;
        int left = 0, right = nums.length - 1;
        while(left<right){
            int mid = (left + right) / 2;
            if(nums[mid] > nums[right]) left = mid + 1;
            else if(nums[mid] < nums[right]) right = mid;
            else right--;
        }


        return nums[left];
    }
}