Search in Rotated Sorted Array II
思路:
如同I
一样,边界推断是很重要的,注意<=``>=
。
由于本题是可反复元素,所以 nums[left]<=nums[mid]无法推断为递增。
须要多一个条件推断。跳过反复的元素。
bool search(int* nums, int numsSize, int target) {
if(numsSize==0) return false;
int left=0;
int right= numsSize-1;
do{
int mid = (left+right)/2;
if(nums[mid]==target) return true;
if(nums[left]<nums[mid]){
if(nums[left]<=target && target<nums[mid]){
right = mid-1;
}else{
left = mid+1;
}
} else if(nums[left]>nums[mid]){
if(nums[mid]<target && target<=nums[right]){
left = mid+1;
}else{
right = mid-1;
}
} else {
left++;
}
}while(left<=right);
return false;
}