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.
思路:这题是Search in Rotated Sorted Array的扩展,在上一题的基础上,考虑重复元素,由于已经排好顺序,所以只用中位数mid和左端点low相同的情况下,前移左端点,low++,继续搜索即可。
class Solution {
public:
bool search(vector<int>& nums, int target) {
int low=0,high=nums.size()-1;
while(low<=high){
int mid=(low+high)/2;
if(nums[mid]==target)
return true;
if(nums[low]<nums[mid]){
if(nums[low]<=target&&target<nums[mid])
high=mid-1;
else
low=mid+1;
}
else if(nums[low]>nums[mid]){
if(nums[mid]<target&&target<=nums[high])
low=mid+1;
else
high=mid-1;
}
else
low++;
}
return false;
}
};