You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何LeetCode求x平方根的二分查找代码返回值需区分处理?

理解二分查找求平方根的循环后返回逻辑

先明确核心目标:我们要找的是最大的整数n,满足n² ≤ x,因为题目要求截断小数部分。你的代码里,循环内如果找到完全匹配的平方根(sqrt*sqrt ==x)会直接返回,剩下的非完全平方数场景,就需要在循环结束后处理。

循环终止的核心条件

当min > max时,循环停止。这说明所有可能的整数范围已经排查完毕,没有找到完全等于x平方根的数,此时需要判断最后一次计算的sqrt和目标答案的关系。

循环结束时的两种典型场景

用具体例子拆解更直观:

场景1:最后一次计算的sqrt平方大于x

比如x=8(目标答案是2):

  • 最后一轮循环:min=3,max=3,计算sqrt=3,3²=9>8,于是执行max=sqrt-1=2,此时min=3>max=2,循环结束。
  • 这时候sqrt=3的平方比x大,说明真正的答案是sqrt-1=2——2是最大的满足2²≤8的整数。

场景2:最后一次计算的sqrt平方小于x

比如x=6(目标答案是2):

  • 最后一轮循环:min=2,max=2,计算sqrt=2,2²=4<6,于是执行min=sqrt+1=3,此时min=3>max=2,循环结束。
  • 这时候sqrt=2的平方比x小,而且sqrt+1=3的平方肯定大于x(不然循环不会终止),所以sqrt就是我们要找的答案。

对应代码里的返回逻辑

代码里的return sqrt*sqrt > x ? sqrt-1: sqrt;就是直接对应上面两种场景:

  • 如果最后一次的sqrt平方大于x,说明它比目标答案大1,返回sqrt-1;
  • 如果平方小于x,说明它就是目标答案,直接返回sqrt。

这样就能准确得到截断小数后的整数平方根。

内容的提问来源于stack exchange,提问作者Sofia Ayala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:45:30