第一题:下列函数的时间复杂度是( )。
int func(int n){
int i=0,sum=0;
while(sum<n)
sum+=++i;
return i;
}
A、O(log2n
) B、O(n1/2
) C、O(n) D、O(nlog2n
)
【解析】
循环次数 | i | sum |
1 | 1 | 1 |
2 | 2 | 3 |
3 | 3 | 6 |
... | ... | ... |
k | k | k*(k+1)/2 |
sum=1+2+...+k= k*(k+1)/2>=n, (k+1)² > 2n,得到k > (2n)1/2 - 1
ps:
第二题:向一个有1000个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。
A、1000 B、499.5 C、500 D、500.5
【解析】
共有n+1个插入位置,i代表插入第几个位置,插入位置后要移动的个数为n-i+1。
E=1/(n+1)*Σ(n-i+1)=n/2(i=1~~n+1)