leetcode 69 x的平方根 JavaScript

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;
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值