Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
参考“Search in Rotated Sorted Array”
每次找到中间点mid以后,先分别向左和向右找到与A[mid]不同的点,然后再用上面的办法进行二分,即先确定有序的一边,然后再判断target的值是否在有序的那个范围里面,如果在则查找有序的那边,如果不在则查找另一半边。
class Solution {
public:
bool search(int A[], int n, int target) {
int start = 0;
int end = n-1;
int mid;
while(start<=end){
mid = (start+end)/2;
if(A[mid]==target)
return true;
int kr = mid;
while(kr<=end && A[kr]==A[mid])
kr++;
int kl = mid;
while(kl>=start && A[kl]==A[mid])
kl--;
if(kr>end){
if(kl<start)
return false;
else{
end = kl;
continue;
}
}
if(kl<start){
if(kr<=end){
start = kr;
continue;
}
}
kr--;
kl++;
if(A[kr]<=A[end]){
if(A[mid]<target && A[end]>=target)
start = kr+1;
else
end = kl-1;
continue;
}
if(A[kl]>=A[end]){
if(A[start]<=target && A[mid]>target)
end = kl-1;
else
start = kr+1;
}
}
return false;
}
};