81. Search in Rotated Sorted Array II

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 n = nums.size();
        int left = 0;
        int right = n-1;
        
        while(left<=right)
        {
            int mid = (left + right)>>1;
            if(target == nums[mid])
               return true;
            if(nums[left]<nums[mid])
               if(nums[left]<=target&&target<nums[mid])
                   right = mid -1; //在前一个有序序列中
               else
                   left = mid +1;
            else if(nums[left]>nums[mid])
               if(nums[mid]<target&&target<=nums[right])
                   left = mid +1;  //在后一个有序序列中
               else
                   right = mid -1;
            else
               left++;
        }
        return false;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容