问题描述
Implement int sqrt(int x)
.
Compute and return the square root of $x$, where $x$ is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example 1:
1 | Input: 4 |
Example 2:
1 | Input: 8 |
Related Topics: Math
, Binary Search
原问题: 69. Sqrt(x)
中文翻译版: 69. x 的平方根
解决方案
首先 $x$ 的平方根取值范围为 $[0, x]$,该区间中可能是 $x$ 的平方根的数要求满足其平方小于等于 $x$。题目中要求输出的是整数,此时问题变为在区间 $[0, x]$ 中寻找满足 $s^2 <= x$ 条件的最大的整数 $s$。
很自然地,我们可以从 $0$ 开始遍历,直到某个值的平方大于 $x$,此时前一个值就是所求的平方根,但是这种解法一般会超时。既然是在一个离散的区间内进行查找,并且区间的元素是有序的,此时我们可以用二分查找 (Binary Search
) 快速找到我们想要的值。
参考解题代码
1 | /* |
这里参考了知乎一个关于二分查找问题的回答 二分查找有几种写法?它们的区别是什么?,因为我们要找的是 $s^2 <= x$ (等价于 $s <= \sqrt{x}$) 的上界,所以参考了 upper_bound(value) - 1
的写法。