跟进“搜索旋转排序数组”,假如有重复元素又将如何?
是否会影响运行时间复杂度?
如何影响?
为何会影响?
写出一个函数判断给定的目标值是否出现在数组中。
样例
给出[3,4,4,5,7,0,1,2]和target=4,返回 true
class Solution {
public:
bool search(vector<int> &A, int target) {
if(A.empty())
return false;
int low = 0, high = A.size()-1;
while(low <= high){
int mid = low+(high-low)/2;
if(A[mid] == target) return true;
if(A[low] < A[mid]){ // A[mid]落在左半区间
if(target >= A[low] && target < A[mid]) high = mid-1; // 目标在左半区间且在mid左边
else low = mid+1;
} else if(A[low] > A[mid]){ // A[mid]落在右半区间
if(target <= A[high] && target > A[mid]) low = mid+1; // 目标在右半区间且在mid右边
else high = mid-1;
} else //相等时顺序查找
low++;
}
return false;
}
};