Java 为什么内部循环执行(n/2)次而不是(n)次 for(int i=0;i

Java 为什么内部循环执行(n/2)次而不是(n)次 for(int i=0;i,java,big-o,Java,Big O,编辑:忘记添加外部循环。i被初始化为零 为什么此代码执行(n/2)次而不是(n)次?此循环平均执行n/2次: 在第一次迭代中,它最多执行n-1次,因为j从1开始 在第二次迭代中,这最多执行n-2次,因为j从2开始 在第三次迭代中,它最多执行n-3次,因为j从3开始 在最后一次迭代中,它执行零次,因为i+1等于数组的长度 如果将第一行添加到最后一行,将第二行添加到后面的第二行,将第三行添加到后面的第三行,依此类推,每对将产生n-1;偶数n的值将有n/2个这样的对,因此循环在n上执行的平均次数

编辑:忘记添加外部循环。i被初始化为零


为什么此代码执行(n/2)次而不是(n)次?

此循环平均执行n/2次:

  • 在第一次迭代中,它最多执行n-1次,因为j从1开始
  • 在第二次迭代中,这最多执行n-2次,因为j从2开始
  • 在第三次迭代中,它最多执行n-3次,因为j从3开始
  • 在最后一次迭代中,它执行零次,因为i+1等于数组的长度

如果将第一行添加到最后一行,将第二行添加到后面的第二行,将第三行添加到后面的第三行,依此类推,每对将产生n-1;偶数n的值将有n/2个这样的对,因此循环在n上执行的平均次数是n/2。

变量
i
初始化为什么?您需要提供更多的代码。这是嵌套在另一个循环中的,对吗?也许你应该全部显示出来。请看编辑:我添加了外循环。然而,我只需要知道“内环”运行时间的解释。因为
j
I+1
开始。另一方面,“if语句”是否在O(1)处运行?分析if语句在“算法分析”中重要吗?@Nicholas绝对重要,用于参考和值比较。
for (int i = 0; i < array.length; i++)   {
 for (int j = i + 1; j < array.length; j++) {
        if (array[i] == array[j]) return true;
    }
}