下面代码小于比较的频率为(N+1)(N+2)/2。
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
}
}
我认为n+1代表第一个循环。(N+2)/2怎么样,知道吗?
最佳答案
在第一次迭代中,内部循环运行N-1
次,在第二次迭代中运行N-2
次,依此类推每次,再次检查<
操作(当条件不再保持时),从而在内部循环的所有迭代中检查N + N-1 + N-2 + ... + 1
。在外循环中,对<
进行额外的<
次检查,总共检查N+1
次这个和等于N+1 + N + ... + 1
。
您还可以将迭代次数可视化为(锯齿状)三角形:
#####
####
###
##
#
通常情况下,边长
(N+2)*(N+1)//2
的直角三角形的面积为N+1
,但由于其假设是“锯齿状的”,因此其附加的(N+1)*(N+1)//2
(即边长为1的(N+1)//2
较小的三角形),再加起来就是N+1