这是我参与更文挑战的第9天,活动详情查看: 更文挑战
题干
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
解法:二分查找
我们求某个数的平方跟,它的平方根一定是在这个数的范围内,并且我们的平方根只能向下取整,这就要我们在判断middle时,再加上一层与middle的下一个数比较的结果,如果这个数大于middle而又小于middle+1时,返回middle即可。
代码实现:
执行用时:96 ms, 在所有 JavaScript 提交中击败了85.84%的用户
内存消耗:39.6 MB, 在所有 JavaScript 提交中击败了11.32%的用户
var mySqrt = function (x) {
let middle = 0;
let high = x;
let low = 1;
if (x == 0) {
return 0
}
while (low <= high) {
middle = Math.floor((high + low) / 2);
if (middle * middle == x || (x > middle * middle && x < (middle + 1) * (middle + 1))) {
return middle
} else if (middle * middle > x) {
high = middle - 1
} else {
low = middle + 1
}
}
};