两层while循环代码时间复杂度推导结果与选项不符求分析
问题代码
x = 1; while(x<n) { x = x + n / 10; m = n*n; y = n; while(m>y) { m=m-100; y=y+20; } }
推导疏漏点
- 你对内层循环的时间复杂度计算错误:内层循环的终止条件是
m <= y,每次循环两个变量的差值会固定减少100+20=120,初始差值为n² - n,因此内层循环的执行次数为(n² -n)/120,量级是O(n²),不是你误以为的O(n)。 - 外层循环的执行次数确实是常数次:每次x增加
n/10,从1增长到n最多只需要执行10次,属于O(1)级别的开销,不会影响整体复杂度的量级。
最终复杂度结论
整体时间复杂度是常数乘以O(n²),最终为O(n²),匹配给出的第一个可选答案。
内容的提问来源于stack exchange,提问作者HulkStoN
相关产品推荐
相关产品推荐

