跟进“搜索旋转排序数组”,假如有重复元素又将如何?
是否会影响运行时间复杂度?
如何影响?
为何会影响?
写出一个函数判断给定的目标值是否出现在数组中。
样例
给出[3,4,4,5,7,0,1,2]和target=4,返回 true
class Solution {
/**
* param A : an integer ratated sorted array and duplicates are allowed
* param target : an integer to be search
* return : a boolean
*/
public:
bool search(vector<int> &A, int target) {
// write your code here
if(A.empty())
return false;
int n=A.size();
int flag=0;
if(A[0]<=target)
flag=1;
else
flag=2;
int first=0,last=n-1,mid;
while(first<last){
mid=(first+last)/2;
if(A[mid]==A[first]&&A[first]==A[last]){
for(int i=0;i<n;i++){
if(A[i]==target)
return true;
}
return false;
}
if(A[mid]==target)
return true;
else if(A[mid]<target){
if(flag==1&&A[mid]<A[0])
last=mid-1;
else if(flag==1&&A[mid]>A[0])
first=mid+1;
else if(A[mid]<A[0])
first=mid+1;
else
return false;
}
else{
if(flag==1)
last=mid-1;
else if(flag==2&&A[mid]<A[0])
last=mid-1;
else
first=mid+1;
}
}
if(A[first]==target)
return true;
else
return false;
}
};
如有问题请留言。
转载请先联系博主,谢谢。