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;
}
};