该题与Search in Rotated Sorted Array 同理,由于存在重复元素,当mid处与边缘right位置处的值相同时,若边缘位置不为target,则边缘right左移一位:
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
int mid=(right+left)/2;
while(left<=right)
{
if(nums[mid]==target/*||nums[left]==target||nums[right]==target*/)
return 1;
else
{
if(nums[mid]<nums[right]) //right is ordered
{
if(target>nums[mid]&&target<=nums[right])
{
left=mid+1;
}
else
{
right=mid-1;
}
}
else //left is ordered
{
if(nums[left]<nums[mid])
{
if(target>=nums[left]&&target<nums[mid])
right=mid-1;
else
left=mid+1;
}
else
{
if(nums[right]==target)
return 1;
else
right--;
}
}
}
mid =(left+right)/2;
}
return 0;
}
};