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

时间:2015-04-11 21:20:00

标签: java big-o

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)次?

1 个答案:

答案 0 :(得分:3)

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

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

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