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.
分析:二分法的基础之上去重
class Solution {
public:
bool search(int A[], int n, int target) {
if(n == 0) return -1;
int left = 0, right = n - 1;
while(left <= right) {
while(left < right && A[left] == A[left + 1]) left++;
while(left < right && A[right] == A[right - 1]) right--;
int mid = (left + right) >> 1;
if(target == A[mid]) {
return true;
} else if(A[left] > A[mid]) {
//情况一: 有序区在[mid, rihgt]
if(A[mid] < target && target <= A[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
} else {
//情况二: 有序区在[left, mid]
if(A[left] <= target && target < A[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
}
return false;
}
};