Search in Rotated Sorted Array II
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.
public class Solution {
public boolean search(int[] A, int target) {
int lo = 0;
int hi = A.length - 1;
int mid;
while (lo <= hi) {
mid = (lo + hi) >> 1;
if (target == A[mid]) {
return true;
} else if (A[lo] == A[mid]) { // A[mid] = A[mid+] = ... A[lo]
for (int i = lo; i < mid; i++) {
if (A[i] == target)
return true;
}
lo = mid + 1;
} else if (A[lo] < A[mid]) {
if (target >= A[lo] && target < A[mid]) {
hi = mid - 1;
} else {
lo = mid + 1;
}
} else {
if (target > A[mid] && target <= A[hi]) {
lo = mid + 1;
} else {
hi = mid - 1;
}
}
}
return false;
}
}