/*本题与的Search in Rotated Sorted Array差别在于可能有重复的
元素,但还是可以采用与Search in Rotated Sorted Array类似的方法。
但是在判断数组哪一半有序时会稍微不一样。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
bool search(int A[], int n, int target) {
int start(0),end(n);
while(start < end){
int mid = (start + end) / 2;
if(A[mid] == target) return true;
if(A[start] < A[mid]){//数组前半部分有序
if(A[start] <= target && target < A[mid]){
end = mid;
}
else{
start = mid + 1;
}
}
else if(A[start] > A[mid]){//数组后半部分单调不减
if(A[mid] < target && target <= A[end-1]){
start = mid + 1;
}
else{
end = mid;
}
}
else{//过掉重复元素
++start;
}
}
return false;
}
};
08-18