题目
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里那套代码不好使了,因为重复元素造成无法判断究竟该向左还是向右,这时候只能用O(n)的方式慢慢找。
代码
public class SearchInRotatedSortedArrayII {
public boolean search(int[] A, int target) {
if (A == null || A.length == 0) {
return false;
}
int low = 0;
int high = A.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (target == A[mid]) {
return true;
}
if (A[low] < A[mid]) {// left half is sorted
if (A[low] <= target && target < A[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
} else if (A[low] > A[mid]) { // right half is sorted
if (A[mid] < target && target <= A[high]) {
low = mid + 1;
} else {
high = mid - 1;
}
} else {
++low;
}
}
return false;
}
}