相比Search in Rotated Sorted Array多了duplicates之后,nums[mid]<nums[r]这个判断就不再准确了。
之前:nums[mid]<nums[r] mid后半段有序升
nums[mid]>nums[r] rotation在mid之后
现在:我们需要考虑nums[mid]==nums[r]的情况,并且我们没有办法判断是处于之前的两种情况中的哪一种
如何解决:如果以上情况发生--> right--
class Solution {
public:
bool search(vector<int>& nums, int target) {
int n = nums.size();
int l=0,r=n-1;
while(l<=r){
int mid = l+(r-l)/2;
if(nums[mid]==target) return true;
else if(nums[mid]<nums[r]){
if(target>nums[mid] && target<=nums[r]) l=mid+1;
else r=mid-1;
}else if(nums[mid]>nums[r]){
if(target>nums[mid] || target<=nums[r]) l=mid+1;
else r=mid-1;
}else r--;
}
return false;
}
};