时间复杂度
时间复杂度BigO
大O表示法算法的渐进时间复杂度
T(n)=O(f(n))
f(n)代表代码执行的次数,O代表正比的关系(n趋于无限大时)
常用时间复杂度量级
O(1)
int x=0;
int y=1;
int temp=x;
x=y;
y=temp;
此段代码变量一直不变
O(n)单层循环
for(int i=0;i<n;i++)
{
x++;
}
O(n^2) 双层循环
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{ x++;
}
O(logN)
int i=1;
while(i<n)
{
i=i*2;
}
设循环k次
2^k=n =>k=logN
O(nlogn)
for(int i=0;i<=n;i++){
int x=1;
while(x<n){
x=x*2;
}
}
内层循环循环logN次(O(logN)),外层循环n+1次(O(n)),整个时间复杂度为nlogN
空间复杂度
空间复杂度:内存空间增长的趋势
常用空间复杂度
O(1)
算法执行所需要的临时空间不随着某个变量n的大小而变化
int x=0;
int y=0;
x++;
y++;
O(N)
int[] newArray=new int[n];
for(int i=0;i<n;i++){
newArray[i]=i;
}
//取决于newArray的长度
O(n^2)二维矩阵
时间空间复杂度即时间和空间增长的趋势