81. Search in Rotated Sorted Array II

来源:互联网 发布:程敏政 知乎 编辑:程序博客网 时间:2024/06/03 10:18

Follow up for "Search 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).

Write a function to determine if a given target is in the array.

The array may contain duplicates.





class Solution {

public:
    bool search(vector<int>& nums, int target) {
        
        int h=nums.size()-1,l=0;
        if(h==-1)return false;
        while(l<h){
            int m=(l+h)/2;
            if(nums[m]==target)
                return true;
            else if(nums[m]<nums[h]){
                if(nums[m]<target&&target<=nums[h])
                    l=m+1;
                else
                    h=m;
            }
            else if(nums[m]>nums[h]){
                if(target<nums[m]&&target>=nums[l])
                //    h=m-1;
                //else
                //    l=m;
                //超时,原因:当nums=[3,1]时,l恒等于0,进入死循环,由于m=(l+h)/2向下取整,故而一定要 l增加,而不是h减少

                    h=m;
                else
                    l=m+1;
            }
            else
                h--;
        }
        return nums[l]==target?true:false;
    }
};