为什么内循环执行 (n/2) 次而不是 (n) 次

Why is the inner loop executing (n/2) times instead of (n) times

for (int i = 0; i < array.length; i++)   {
 for (int j = i + 1; j < array.length; j++) {
        if (array[i] == array[j]) return true;
    }
}

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

为什么这段代码执行了 (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.