一.时间复杂度
时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O表述,不包括这个函数的常数项和系数。
大O表示法
大O表示法就是将算法的所有步骤转换为代数项,然后排除不会对问题的整体复杂度产生较大影响的常数项和系数。
常见的算法时间复杂度由小到大依次为:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<…<O(2^n)<O(n!)
二.空间复杂度
1.空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度;
2.一个算法在计算机上占用的内存包括:程序代码所占用的空间,输入输出数据所占用的空间和辅助变量所占用的空间。程序代码所占用的空间取决于算法本身的长短,输入输出数据所占用的空间取决于要解决的问题,是通过参数表调用函数传递而来,只有辅助变量是算法运行过程中临时占用的存储空间,与空间复杂度相关。
三.作业题解
1.洛谷p8780 刷题统计
#include <iostream>
using namespace std;
int main()
{
long long int a,b,n,day,ans,week,i,tmp;
cin>>a>>b>>n;
ans=5*a+2*b;
week=n/ans;
day=week*7;
tmp=week*ans;
for(i=1;tmp<n;i++)
{
if(i%7==\6||i%7==0)
tmp=tmp+b;
else
tmp=tmp+a;
day++;
}
cout<<day;
return 0;
}
2.洛谷p2249
#include <iostream>
using namespace std;
int n,m,a[1000005];
int main()
{
int tmp;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=0;i<m;i++)
{
cin>>tmp;
int mark=lower_bound(a+1,a+n+1,tmp)-a;
if(a[mark]==tmp)
cout<<mark<<" ";
else cout<<"-1"<<" ";
}
return 0;
}
lower_bound函数
作用:lower_bound()返回值是一个迭代器,返回值向大于等于key的第一个值的位置
使用前提:有序数组或容器