https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
//有重复元素存在,nums[l] <= nums[mid]不能说明[l,mid]区间内一定是单调的,比如数组[1,2,3,1,1,1,1],
//但是严格小于和严格大于的情况还是可以判断的。所以当nums[l] == nums[mid]时,令l++,跳过这个重复元素。
//该算法最坏情况下(所有元素相同)时间复杂度是𝑂(𝑛)的。
class Solution {
public:
bool search(vector<int>& nums, int target) {
if(nums.size()==0) return false;
int start=0,mid=0, end=nums.size()-1;
while (start<=end) {
mid=(start+end)/2;
if(nums[mid]==target) return true;
if(nums[start]<nums[mid]){//不能等于 有重复
if(nums[start]<=target&&target<nums[mid]){
end=mid-1;
}
else{
start=mid+1;
}
}
else if(nums[mid]<nums[start]){ //在右边
if(nums[mid]<target&&target<=nums[end]){
start=mid+1;
}
else{
end=mid-1;
}
}
else if(nums[mid]==nums[start]){
start++;
}
}
return false;
}
};