1. 程式人生 > >leetcode 154. Find Minimum in Rotated Sorted Array II

leetcode 154. Find Minimum in Rotated Sorted Array II

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.

The array may contain duplicates.

Example 1:

Input: [1,3,5]
Output: 1

Example 2:

Input: [2,2,2,0,1]
Output: 0

二分查詢,考慮兩種特殊情況:

3,3,3,3,3,3,1,3,3 ,3 

4,0,1,3,3 ,3 ,3,3,3,3

加粗為middle點,第一種情況,中間點等於左邊點,target必在left右邊,使left+1。第二種情況,確定與左邊不相連,target在middle左邊,使middle=right。

class Solution {
    public int findMin(int[] nums) {
        int l=0,r=nums.length-1;
        while(l<r){
            int m=(l+r)/2;
            if(nums[l]==nums[m]&&l!=m){//排除起始相等,考慮邊界情況
                l++;
            }else if(nums[m]>nums[r]){ 
                l=m+1;
            }else if(nums[m]<nums[l]||nums[m]==nums[r]){
                r=m;
            }else{
                return nums[l];
            }
        }
        return nums[l];
    }
}