我正在尝试使我在下面编写的算法的复杂性更加清晰:
left = 1
right = 1
for i=0; i < array.len; i ++:
j = i+1
for j; j < array.len; j++:
right *= array[j]
tmp[i] = array[idx]
left *= array[idx]
right = 1
return tmp
如果将数组大小定义为n,则外循环为O(n),但内循环实际上并没有一直迭代n-1次,仅在i = 0时才第一次迭代。
那么,复杂度是多少? O(n)为外循环 O(n-j)为内循环? 因此,也许O(n(n-j))?到底是O(n ^ 2)?
请帮助。
答案 0 :(得分:2)
是的,O(n ^ 2)是时间复杂度。第一个循环运行n次。第二个循环对于第一个循环的每次迭代运行n次。 n * n = n ^ 2