leetcode problem 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

Note:

  • This is a follow up problem to Find Minimum in Rotated Sorted Array.
  • Would allow duplicates affect the run-time complexity? How and why?

算法解析:当有重复元素,且二分查找时,中点在重复元素上,无法继续查找下去,因此,先去除图中黄色部分,接下来问题变得跟上题一样

leetcode problem 154 Find Minimum in Rotated Sorted Array II_第1张图片

代码如下:

class Solution {
public:
    int findMin(vector& nums) {
        int l = 0, r = nums.size()-1;
        while(l < r && nums[l] == nums[r]) r--;
        if(nums[l] <= nums[r]) return nums[0];
        while(l < r)
        {
            int mid = l + r >> 1;
            if(nums[mid] < nums[0])  r = mid;
            else  l = mid + 1;
        }
        return nums[r];
    }
};

 

 

你可能感兴趣的:(刷题,C/C++,leetcode,算法)