题目描述
请实现 int sqrt(int x)。
请计算并返回 x的正平方根,保证 x 是一个非负整数。
注意返回类型是整数,所以我们只返回正平方根的整数部分。
示例一
输入:4
输出:2
示例二
输入:8
输出:2
解释:8的正平方根是 2.82842…,它的整数部分是2
思路
二分出最大的 y,满足 y 2 < = x y^2<=x y2<=x。则 y 就是答案。
代码
class Solution {
public:
int mySqrt(int x) {
int l = 0, r = x;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (mid <= x / mid) l = mid;
else r = mid - 1;
}
return l;
}
};