输出语句在此片段中执行了多少次?

时间:2015-02-19 20:36:44

标签: 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次,而i的第二个i=1执行i 1}},内循环将执行n-1次。对于i=n-2i的(n-1)次,内部循环将执行2次,而i=n-1的最后一次执行n+(n-1)+(n-2)+...+2+1=n(n+1)/2,所以内循环将执行1次。

将它们加在一起n(n-1)/2

但是教科书的答案是{{1}},那我的答案有什么不对?

2 个答案:

答案 0 :(得分:1)

你基本上打印从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 - 所有可能的重复

答案 1 :(得分:0)

您确定您的教科书代码不是

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

根据答案,这会给你(n-1)n/2

如果没有,并且您的代码与本书完全一致,那么您是正确的 - 您只是选择所有可能的替换对,因此它是(n+1)n/2