leetcode 69 x的平方根 JavaScript
思路:
利用二分查找的方法,不断缩小左指针和右指针,直到中间值mid取得平方根后结束(注意这里对于不能开方成整数的都舍去小数,所以mid在这种情况下是得不到对应的值的)
举个例子 3的平方根是1点几。首先左指针l=0 右指针r=3 中间值取得为Math.floor((0+3)/2)=1 判断1 * 1=1<3,所以左指针左移到1的右边,也就是2;
下一步中间值为Math.floor((2+3)/2) = 2 判断2 * 2=4>3,所以右指针移动到2的左边,也就是1。此时l=2,r=1,结束循环。那如果像这样得不到值该怎么办?可以发现在1 * 1=1<3的时候其实就得到正确答案1了,那么我们获取这种无法整数开方的数,可以在mid*mid<=x的情况下直接给输出的结果ans进行更新,这样最终遍历完之后输出的ans就是我们要的结果了。
代码如下:
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function(x) {
let l = 0;
let r = x;
let ans = 0;
while(l<=r){
let mid = Math.floor(l + (r-l)/2);
if(mid*mid<=x) {
ans = mid;
l = mid+1
};
if(mid*mid>x) r = mid-1;
}
return ans;
};