思路:在无重复的基础上加一个条件
if(nums[mid]==nums[left]){
left++;
continue;
}
当 nums[mid] == nums[left] 时,让 left++,并退出本次循环,其余部分完全相同
class Solution {
public boolean search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(target==nums[mid]){
return true;
}
//多一个条件,就是去掉多余的重复数字
if(nums[mid]==nums[left]){
left++;
continue;
}
if(nums[mid]>nums[left]){//大情况一:mid在数组一
//小情况一:t在mid和left之间
if(nums[mid]>target&&target>=nums[left]){
right=mid-1;
//小情况二:t在mid和right之间
}else if(nums[left]>target||target>nums[mid]){
left=mid+1;
}
//大情况二:mid在数组二中
}else if(nums[mid]<nums[left]){
//小情况一:t在mid和left之间
if(target>nums[right]||target<nums[mid]){
right=mid-1;
//小情况二:t在mid和right之间
}else if(target>nums[mid]&&target<nums[right]){
left=mid+1;
}
}
}
return false;
}
}