下面代码小于比较的频率为(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

09-28 10:21