我知道此算法的big-O复杂度是O(n^2),但我不明白为什么。

int sum = 0;
int i = 1; j = n * n;
while (i++ < j--)
  sum++;

即使我们在开始时设置了j = n * n,也要在每次迭代过程中增加i并减少j,因此,得出的迭代次数是否应该比n*n小很多?

最佳答案

在每次迭代期间,您增加i并减少j,这等效于将i递增2。因此,迭代总数为n ^ 2/2,仍然为O(n ^ 2)。

07-24 21:54