LeetCode 题解:69. x 的平方根,二分查找,JavaScript,详细注释
原题链接:https://leetcode-cn.com/problems/sqrtx/
解题思路:
该题相当于是对于 $y=t^{z-1}$,已知 $y$求 $x$,并且 $y$为正整数,意味着在 $x > 0$时,$y$是一条单调递增的曲线。
因此,该题可以简化为在 $0$到 $x$之间寻找一个数,它的平方等于 $x$,并将其整数部分作为结果返回。
使用二分查找,每次在 $left$和 $right$之间取中值 $mid$,判断 $mid^{2}$与 x 的大小。
如果 $mid^{2}$比 x 大,表示结果在 $left$到 $mid$之间,否则在 $mid$到 $right$之间。
不断重复步骤 3 和 4,最终左右指针会相遇,此时 $mid=left=right$,$mid^{2}$会有两种情况:
* $mid^{2}$大于 $x$时,最终结果在 $mid$到 $mid-1$之间,经过四舍五入后为 $mid$,也就是退出循环后的 $right$的值。
* $mid^{2}$等于 $x$时,退出循环后,$right$即为 $mid$的值。
因此最终将 $right$的值作为结果返回即可。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/9e26d1461e857465e2a12c289】。文章转载请联系作者。
评论