为什么内循环执行 (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.
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.