The idea is borrowed from dong.wang.1694 in the discuss which uses only one time binary search.
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1,mid=(left+right)/2;
while(left<right)
{
if(nums[mid]==target)
return true;
if(nums[left]==nums[mid]&&nums[right]==nums[mid])
{
left++;
right--;
}
else if(nums[left]<=nums[mid])
{
if(nums[mid]>target&&nums[left]<=target)
right=mid-1;
else
left=mid+1;
}
else if(nums[right]>=nums[mid])
{
if(nums[mid]<target&&nums[right]>=target)
left=mid+1;
else
right=mid-1;
}
mid=(left+right)/2;
}
if(nums[mid]==target)
return true;
return false;
}
};