这个算法的时间复杂度是多少?我最初的猜测是 O(log [n])?
int array[] = new int[100];
int counter = 0;
for ( int i = 0; i < array.length; i++ ) {
for ( int j = i + 1; j < array.length; j++ ) {
if ( array[i] == array[j] ) {
counter++;
}
}
}
答案 0 :(得分:3)
代码中的if
部分执行约1 + 2 + 3 +...+ n
次n - i - 1
其中i = 0...n - 1
,等于0,5*n*(n+1)
O(n^2)
}。
答案 1 :(得分:2)
不。这是 O(N ^ 2)。
在“如何确定复杂性”下查看here第4节
答案 2 :(得分:0)
有两种可能的答案。技术上正确的是O(1)
,因为数组具有恒定的长度,因此内循环迭代的数量是常数。
如果我们假设数组的长度为n,则内循环的迭代次数为n-1,n-2,n-3,...,1,0。算术级数的总和长度为n,从0开始,为O(n^2)
。
答案 3 :(得分:0)
The order is O(n^2).
说明:假设数组长度为n。
然后迭代第一个循环:
第二次循环会有n-2次迭代
总时间为:(n-2)+(n-2)+ ............(n-2)//为n-1次
这将是:(n-1)*(n-2)。
答案 4 :(得分:0)
推断算法时间复杂度的正式方法: