Skip to main content

69. x 的平方根

给你一个非负整数 x ,计算并返回  x  的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

题目

示例 1

输入:x = 4
输出:2

示例 2

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

答案

对撞指针

思路:

  1. 缩小范围 right = x/2 +1 (由于 x 的一半的平方总大于 x,可以直接干掉 x 一半,缩小范围)
  2. 对撞指针找到最大中间值(mid * mid <= x)
var mySqrt = function(x) {
// 二分法
let left = 0 // 0 到 中间
let right = x/2+1 // 由于x的一半的平方总大于x,可以直接干掉x一半,缩小范围

//常规二分法:不断取中间值去尝试。直到left <= right 的值为止,说明left已经到达中间
while (left <= right) {
// 取中间
let mid=left+Math.floor((right-left)/2);

// 找到mid * mid 小于x 的最大mid
if(mid * mid <= x){
left = mid +1 // 正向遍历
}else{
right = mid - 1; // 反向遍历
}
}

return left-1
};
console.log(mySqrt(4))