和http://blog.csdn.net/mazhichao300/article/details/9950089类似,
只是第三种情况的时候,我们无法再去排除一半,只能两边都去搜索。
比如:3, 6, 3, 3, 3(target = 6)就无法确定。
这样时间复杂度是多少呢?
class Solution {
public:
bool bs(int a[], int start, int end, int target)
{
if(start > end) return false;
int mid = (start + end) >> 1;
if(a[mid] == target) return true;
if(a[mid] < a[start] && a[mid] <= a[end])
{
if(a[mid] > target || target > a[end])
return bs(a, start, mid - 1, target);
else return bs(a, mid + 1, end, target);
}
else if(a[mid] >= a[start] && a[mid] > a[end])
{
if(a[mid] < target || a[start] > target)
return bs(a, mid + 1, end, target);
else return bs(a, start, mid - 1, target);
}
else
{
return bs(a, mid + 1, end, target)
|| bs(a, start, mid - 1, target);
}
}
bool search(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
return bs(A, 0, n - 1, target);
}
};