能否请您说明我在每一步中遍历数组中“未访问”项的以下代码的复杂性是什么?
final int[] arr = {...};
for (int i = 0, length = arr.length; i < length; i++) {
System.out.print(arr[i]);
for (int j = i + 1; j < length; j++) {
System.out.print(arr[j]);
}
}
我打赌它是O(NlogN)
或O(N√N)
,其中N
是arr.length
我是对的吗?你能告诉我为什么吗?
我认为它是O(NlogN)
或O(N√N)
,因为每一步的“未访问”部分都会减少,因此小于O(N^2)
但仍大于O(N)
答案 0 :(得分:3)
我认为您的例程打印如下:
arr[0] arr[1] arr[2] ... arr[n]
arr[1] arr[2] arr[3] ... arr[n]
...
arr[n]
如果每个步骤的计算是印刷,那么我会说复杂度为O(n^2)
。因为所有打印的数量是(length+1)*length/2
。