LeetCode 154. Find Minimum in Rotated Sorted Array II

Suppose a sorted array 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.

 

思路:由于右半部份全部比左半部分都小, 所以用二分。 mid比left大往left右移动, mid比right小,right往左移。

关键是重复的时候咋办。 其实重复只会在两端出现,我的处理办法在初始的时候就把这种情况解决掉。 这样在极端情况下复杂度会比较差。 参考了别人二分写法,算了下复杂度,在极端情况下也是一样的。

AC代码:

class Solution {
public:
    int findMin(vector<int>& nums) {
        int n = nums.size();
        int left = 0, right = n-1;
        while(right>0 && nums[right]==nums[left]) right--;
        if(right == 0) return nums[0];
        if(nums[right]>nums[left]) return nums[left];
        while(left+1 < right)
        {
            int mid = (left+right)>>1;
            if(nums[left] <= nums[mid])
            {
                left = mid;
            }
            else right = mid;
        }
        return nums[(left+1)%n];
    }
};
View Code

 

posted @ 2016-03-18 13:24  Gu Feiyang  阅读(113)  评论(0)    收藏  举报