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

class Solution {
    public int findMin(int[] nums) {
        int start = 0;
        int end = nums.length - 1;

        if(nums[start] < nums[end]) return nums[start]; //排除一直增大的情况

        while(start + 1 < end) {
            int middle = start + (end - start) / 2;
            if(nums[middle] < nums[0]) end = middle;
            else if(nums[middle] > nums[0]) start = middle;          
        }

        return nums[end];
    }
}


若数字有重复,那最坏情况是全部1,然后有一个0,时间复杂度必然是o(n)。就写个普通的for循环好了

results matching ""

    No results matching ""