leetNode No154. Find Minimum in Rotated Sorted Array II

来源:互联网 发布:bershka 知乎 编辑:程序博客网 时间:2024/06/01 20:50

Question

Follow up for “Find Minimum in Rotated Sorted Array”:
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?
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.

Algorithm

见代码注释

Accepted Code

class Solution {public:    int findMin(vector<int>& nums) {        int left=0,right=nums.size()-1,mid=0;        while(left < right){            mid=(right-left)/2+left;            if(nums[left] < nums[right])  //顺序                return nums[left];            else if(nums[left] > nums[mid]) //左边无序,最小值在左边,最小值可能是nums[mid],因为nums[mid]<nums[left]                right=mid;            else if(nums[right] < nums[mid]) //右边无序,最小值在右边,最小值不可能是nums[mid],因为nums[mid]>nums[right]                left=mid+1;            else   //nums[mid]<=nums[left]&&nums[mid]<=nums[right]&&nums[left]<=nums[right] =>> nums[left]=nums[mid]=nums[right]                   //此时已经不能通过二分搜索来查找了   比如 222222122222,只能遍历            {                right--;            }        }        return nums[left];    }};
原创粉丝点击