Skip to content

2019年 408 数据结构 第 1 题

数据结构2019年选择题2分

题目

设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是( )。

x = 0;
while (n >= (x + 1) * (x + 1))
    x = x + 1;

错因

A

把这道题套到了"二分/折半"的模板上,看到条件里有乘法就联想成对数级别。其实判断式 决定的是循环何时终止,而每轮 x 只是 +1,并没有任何"折半"动作,所以达不到 这个量级。

C

只盯着 x = x + 1 的递增动作,就直觉认为"x 要从 0 一路加到 n",于是判定为线性。忽略了循环条件不是 x < n 而是 :x 还远没有爬到 n 时循环就提前退出了。

D

被条件里的 误导,把"条件里有平方"等同于"循环跑了 次"。其实平方在这里是退出阈值——平方越大越早超过 n、循环越早结束,与 的方向恰好相反。

总解析

思路:循环次数取决于"条件何时第一次不成立"。

设循环第 k+1 轮进入时 x = k,循环条件检查 。循环结束的临界条件是:

也就是说 x 从 0 增长到约 就停。每轮循环体只有一次比较和一次自增,都是

总执行次数约为 ,故时间复杂度为:

最终答案是 B

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数