这段代码的时间复杂度是多少?
我尝试使用二进制搜索解决此问题,但无法以这种方式解决,请帮助查找此代码的复杂性。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
int x;
cin>>x;
int p=-1;
int q=n;
while(p+1<q)
{
int m=(p+q)/2;
if(a[m]<x)
p=m;
else
q=m;
}
cout<<"j";
}
答案 0 :(得分:0)
将代码更改为
p = m + 1;
其他
q = m-1;
找到元素后也终止。复杂度是二进制搜索log(n)。