從N個數中取出三個數,求有多少種三個數的和是0?
很容易想到如下代碼
public static int count (int[]a){
int count=0;
int N=a.length;
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
for(int k=j+1;k<N;k++){
if(a[i]+a[j]+a[k]==0){
count++;
}
}
}
}
return count;
}
很容易想到從n個數中確三個數的組合共
n(n-1)(n-2)
但是其順序有 種
所以其算法複雜度爲
n(n-1)(n-2)/ =
這個表達式在N很大的時候首項相比其他項要大的多,比如N=1000時
而 所以上式,可以簡化爲
函數 | 近似 | 增長的數量級 |
3 | 3 | 1 |