Big o 嵌套j=i+;1回路

Big o 嵌套j=i+;1回路,big-o,Big O,谁能告诉我以下代码的时间复杂度是多少 for (int i = 0; i < array.length - 1; i++) { for (int j = i + 1; j < array.length; j++) { // do something } } for(int i=0;i

谁能告诉我以下代码的时间复杂度是多少

for (int i = 0; i < array.length - 1; i++) {
    for (int j = i + 1; j < array.length; j++) {
        // do something
    }
}
for(int i=0;i

它不可能是O(n^2)
,因为
j=i+1
?谢谢

外循环有
n-1
次迭代。在每次迭代中,内部循环迭代
n-i-1
次。因此,总的来说,内部循环迭代
n-1+n-2+…+1次。因此,
做某事
执行的次数等于从1到
n-1
的数字之和。这个总和是
n*(n-1)/2
,它在θ(n^2)中,因此也在O(n^2)中。

“它不可能是O(n^2),因为j=i+1”-这是一个非序列。这个链接可能提供一些更有用的信息:sepp2k,非常感谢您的解释@用户814064,谢谢你的链接,它真的很有帮助。我不明白为什么我们不把迭代的内部和与外部循环相乘<代码>n*(n*(n-1)/2)
。如果j始终从0开始得到n,我们就会这样做*n@sidoshi你不能同时做乘法和加法,无论是哪种情况。当
j
从0开始时,您得到
n+…+n
,等于
n*n
。当
j
i+1
开始时,您得到
n-1+…+1
,等于
n*(n-1)/2
。在任何一种情况下,您都可以使用求和或闭合形式。你不会把封闭形式乘以
n
——如果你这样做,你会得到
n^3
,对于
j
从0开始的情况,我现在明白了。谢谢:)