这两者的时间空间复杂度有什么不同吗?
for (int i=0; i<= 100; i++) {
System.out.println("hi");
}
for (int i=100; i>= 0; i--) {
System.out.println("hi");
}
如果循环更大更复杂怎么办?比如什么时候i <= 1000000
不,两者在空间或时间复杂度上没有区别。
我很想知道你为什么认为可能存在。
PS当然,如果实际代码不同,那么答案也可能不同。
只要您不使用某些逻辑(取决于索引变量)跳出循环,空间/复杂性就应该没有区别。
如果您需要迭代索引的每个值,则反向顺序与向前顺序完全相同。
对于这个特定的例子不是。对于较大的阵列,在某些系统上可能会更慢。
通常系统会针对顺序访问内存进行优化。只要内存访问模式是可预测的,两个循环都具有相同的效率,但在较旧的机器或不同的架构上,情况可能会有所不同。
因为空间复杂度不是(我错过了这个问题)
对于这些简单的循环?不,您只是在使用一个常量字符串、一些System.out.println()
' 开销和一个迭代的原语。
但是,对于更复杂的嵌套循环,可能会有所不同,尤其是当循环嵌套时,内部循环长度会发生变化。
没有两者具有相同的时间空间复杂度。
因此,时间复杂度没有差异,即 O(N)。
决定采用哪种方法取决于您的设计。例如,如果我必须找到给定数字的最大素数,我可能会使用第二种方法。所以基本上它是(你的预期项目的)设计特定的。