考虑以下代码:
int sum = 0;
for(int i = 0; i < N*N; i++)
{
for(int j = i; j < N; j++)
{
sum++;
System.out.println(sum);
}
}
我一直都知道找时间复杂度是要找出内循环执行的次数。但是在上面的代码中,内部循环将一直运行,直到我达到N.当我超过N时,内部循环不再更新sum的值。但外循环将继续运行完成。
因此,由于内循环一直运行直到我达到N,所以该代码的时间复杂度不应该是O(N ^ 2)吗?解决方案说时间复杂度为O(N ^ 3)。
答案 0 :(得分:0)
O(n ^ 3)是正确的!
对于外循环(i)
的每次迭代,内循环(j)
将迭代N次,然后它将退出循环。外部循环将i=0
增加到i=1
然后再次执行内部循环(再次迭代N次),并将继续执行此操作直到i = N*N
。所以你可以说内循环每次外循环迭代迭代N次。
外部循环从i=0
开始,并且迭代N * N次。
如果每次外循环循环时内循环循环N次,并且外循环迭代N * N次,则内循环的迭代总次数为:
(# of inner iterations per outer iteration) * (# of outer iterations)
= (N) * (N*N)
= N^3