看到这样一段代码:
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
//复杂度为O(1)的算法
...
}
}
这个算法的时间复杂度为什么是O(n^2)呢?
观察内循环
n+(n-1)+(n-2)+(n-3)+……+1
=(n+1)+[(n-1)+2]+[(n-2)+3]+[(n-3)+4]+……
=(n+1)+(n+1)+(n+1)+(n+1)+……
=(n+1)n/2
=n(n+1)/2
=n²/2+n/2
我们可以得到内循环的时间复杂度为O(n²),为什么不再乘以外循环的n呢?
关键:
如果内外循环之间的循环量之间没关系可将内外循环次数之积作为复杂度看待
若有关系则考虑内循环的基本操作的执行次数来分析复杂度