Search in Rotated Sorted Array II
- leetcode: Search in Rotated Sorted Array II | LeetCode OJ
- lintcode:
Would this affect the run-time complexity? How and why?
题解
仔细分析此题和之前一题的不同之处,前一题我们利用这一关键信息,而在此题中由于有重复元素的存在,在A[start] == A[mid]
时无法确定有序数组,此时只能依次递增start/递减end以缩小搜索范围,时间复杂度最差变为O(n)。
public class Solution {
/**
* param A : an integer ratated sorted array and duplicates are allowed
* param target : an integer to be search
* return : a boolean
*/
if (A == null || A.length == 0) return false;
int lb = 0, ub = A.length - 1;
while (lb + 1 < ub) {
int mid = lb + (ub - lb) / 2;
if (A[mid] > A[lb]) {
// case1: numbers between lb and mid are sorted
if (A[lb] <= target && target <= A[mid]) {
ub = mid;
} else {
lb = mid;
}
} else if (A[mid] < A[lb]) {
if (A[mid] <= target && target <= A[ub]) {
lb = mid;
} else {
}
} else {
// case3: A[mid] == target
lb++;
}
}
if (target == A[lb] || target == A[ub]) {
return true;
}
return false;
}
最差情况下 O(n), 平均情况下 O(\log n).