我應該分析這段代碼並說出它的時間複雜度,但是我無法理解代碼本身的作用,它如何改變數組a?陣列算法及其時間複雜度分析
我也不明白以下兩個操作: 1)foobar [a [i]] ++; 所以,你用數組a中的元素替換foobar中的零?但是++能做什麼?
2) a [outPos ++] = 1; 這首先增加了outPos,並在整個for循環中保持[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中的最後一個元素很大,然後它會是二次的?