【发布时间】:2016-06-17 13:45:16
【问题描述】:
我应该分析这段代码并说明它的时间复杂度,但我无法理解代码本身的作用,它如何改变数组 a?
下面两个操作我也看不懂: 1) foobar[a[i]]++; 所以你用数组 a 的元素替换 foobar 中的零?但是 ++ 有什么作用呢?
2) a[outPos++]=1; 这首先增加 outPos,并在整个 for 循环期间保持 a[0] 不变?
public static void foo(int[] a, int b) {
int [] foobar = new int[b+1];
for (int i = 0; i<foobar.length; i++)
foobar[i]=0;
for (int i = 0; i<a.length; i++)
foobar[a[i]]++;
int outPos = 0;
for (int i=0; i<foobar.length; i++)
for (int j=0; j<foobar[i]; j++)
a[outPos++]=i;
}
就时间复杂度而言,我认为是 O(n^2)。前两个 for 循环在恒定时间内运行。但是在我看来,第三个嵌套循环的最坏情况是 foobar 中的最后一个元素很大,然后它会是二次的?
【问题讨论】:
标签: java arrays algorithm time