java - 这段输出语句执行了多少次?

标签 java algorithm big-o

片段是

for(int i=0;i<n;i++)
    for(int j=n-1;j>=i;j--)
        System.out.println(i + " " + j);

我的答案是,对于 i 的第一个,i=0 和内部循环 (int j=n-1;j>=0; j--)会执行n次,对于第2个ii=1,内层循环会执行n-1次。而对于第(n-1)次ii=n-2,内循环会执行2次,而对于最后一次 ii=n-1,所以内层循环会执行1次。

将它们相加n+(n-1)+(n-2)+...+2+1=n(n+1)/2

但是课本上的答案是n(n-1)/2,那我的答案有什么问题呢?

最佳答案

您基本上是在打印从 1 到 n 的 2 个数字的每个组合,而不考虑顺序的重要性和重复(相同的元素可以选择两次)。

C(n,2) + n = n!/((n-2)!2!) + n = n(n-1)/2 + n = n(n+1)/2 这样的可能性,其中 n 是元素的数量。

  • C(n,2) - 从 n 个元素中选择 2 个元素,不重复
  • n - 所有可能的重复项

关于java - 这段输出语句执行了多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616391/

相关文章:

Java如何使参数成为另外两个参数的乘积?

Java 文本格式化

java - HttpClient javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated when time shifted?

algorithm - 如何生成表示 'e' 二进制扩展的系列

algorithm - 按顺时针/逆时针顺序对一组 3-D 点进行排序

javascript - 如何在线性时间内追加字符串

big-o - 大哦测量什么时间单位?

java - spring boot data rest 中的日期问题

python - 将 Python 列表组合在一起以获得公共(public)元素

algorithm - 给定一个二维字符数组,找到从左上角到右下角的所有路径