【发布时间】:2026-01-18 03:45:01
【问题描述】:
是 O(n) 还是 O(n*n)?
循环运行大约 n*n 次,但循环变量只有一个。
我很困惑它是否是 O(n) 算法 我认为它应该是 O(n*n) 但 gfg 说它是 O(n)
谁能帮我解答一下?
int j=0;
for(int i=1; i<=n; )
{
if(j<i)
{
j++;
continue;
}
if(j==i)
{
i++;
j=0;
}
}
【问题讨论】:
-
你认为循环为什么会运行
n * n次? (仔细检查我认为你是对的,因为i不会在每次循环运行时增加,但很高兴听到你对此的推理。) -
循环没有副作用,可以被编译器丢弃,导致时间复杂度 O(1)。
-
循环运行大约 nn 次* -- 如前所述,C++ 编译器可能只是删除整个循环,因为它所做的只是旋转*,实际上什么都不做这会影响更大程序的任何其他部分。
-
但是 gfg 说它是 O(n) -- 如果他们说这就是答案,为什么不在“gfg”那里讨论呢?或者你这样做了,他们告诉你“对不起,你错了”?他们有一个论坛,不是吗?此外,如果这是您的目标,我不建议您使用“gfg”网站来学习 C++ 编程。
-
它不是算法,因为它什么都不做。它改变的 j 结束后再次为 0。因此,符合 C++ 的实现可能会删除 for 循环作为优化。
标签: java c++ loops for-loop time-complexity