时间复杂度
要分析一个程序的时间复杂度
时间复杂度的最好、最坏、平均和均摊
最好时间复杂度:在最理想的情况下,执行这段代码的时间复杂度。
最坏时间复杂度:在最糟糕的情况下,执行这段代码的时间复杂度。
平均时间复杂度:考虑各种情况及其发生的概率,得到的时间复杂度。
均摊时间复杂度:均摊时间复杂度是一种特殊的平均复杂度,把耗时多的复杂度均摊到耗时低的复杂度,得到的时间复杂度。
1.忽略常数项。
2.忽略系数。
3.只保留最高项
查找
#include<iostream>
#define maxn 1000010
using namespace std;
int a[maxn],n,m,q;
int find(int x){
int l=1,r=n+1;
while(l<r){
int mid=(l+(r-1))/2;
if(a[mid]>=x)
r=mid;
else{
l=mid+1;
}
}
if(a[l]==x)
return l;
else
return -1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
for(int i=0;i<m;++i){
cin>>q;
cout<<find(q)<<" ";
}
return 0;
}
二分查找可以降低查找所需的时间优化了算法的时间复杂度
刷题统计
#include<iostream>
#define maxn 1000010
using namespace std;
int a[maxn],n,m,q;
int find(int x){
int l=1,r=n+1;
while(l<r){
int mid=(l+(r-1))/2;
if(a[mid]>=x)
r=mid;
else{
l=mid+1;
}
}
if(a[l]==x)
return l;
else
return -1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
for(int i=0;i<m;++i){
cin>>q;
cout<<find(q)<<" ";
}
return 0;
}