Problem:
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.
Analysis:
Solutions:
C++:
bool search(vector<int> A, int target)
{
int n = A.size();
if(n == 0)
return false;
for(int start = 0, end = n -1; start <= end;) {
for(;start < end && A[start + 1] == A[start];)
++start;
for(; end > start && A[end - 1] == A[end];)
--end;
if(A[start] == target)
return true;
else if(A[end] == target)
return true;
if(start >= end - 1)
break;
int mid = (start + end) / 2;
if(A[mid] == target)
return true;
else if(A[mid] >= A[start] && A[mid] >= A[end]) {
for(;mid >= start && A[mid - 1] == A[mid];)
--mid;
if(target > A[start] && target < A[mid])
end = mid;
else
start = mid;
} else {
for(;mid <= end && A[mid + 1] == A[mid];)
++mid;
if(target > A[mid] && target < A[end])
start = mid;
else
end = mid;
}
}
return false;
}
Java:
Python: