例题
1.下列程序段的时间复杂度为()
int i = 0, s = 0;
while (s < n) {
s += i;
i++;
}
[√]O(n^(1/2))
[]O(n^(1/3))
[]O(n)
[]O(n^2)
来源:牛客网,链接:
链接:https://www.nowcoder.com/questionTerminal/6b53fbef676843b2b53d9d0f18f4e7ea
来源:牛客网
显然n表示规模,s=s+i和i++是基本操作
i与s都是从0开始,假设循环执行了m次结束,则有
s1 = 1
s2 = 1+2 = 3
s3 = 1+2+3 = 6
...
s_m = 1+2+3+...+m =
(等差数列求和)
由以上公式可以得到等式
((1+m)m)/2 + K = n(K为起修正作用的常数)
由求根公式解出
即
由此可知