【JS】 求x 的平方根 #数学 #二分查找

实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:
输入: 4
输出: 2

示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

解法一:

使用二分查找,取左右两个数的中间值作为游标去寻找最接近的平方根数,当左边的数大于右边的数时,返回右边的数减1当有小数点的话向下取整

// 2018/11/18 上午
var mySqrt = function(x) {
    var lo=0,hi=x,mid;
    while(lo<=hi){
        mid=Math.ceil((lo+hi)/2)
        // console.log(lo,hi,mid,mid*mid)
        if(mid*mid==x) return mid;
        if(mid*mid<x){
            lo=mid+1
        }else{
            hi=mid-1;
        }
    }
return Math.floor(hi);
};

1017 / 1017 个通过测试用例
执行用时:96 ms

解法二:

从1开始累加找平方根,当大于目标值的时候,就返回当前数减1

var mySqrt = function(x) {
    var square,status=0;
    for(var i=1;i<=x/i;i++){
        square=i*i
        if(square==x) return i;
        if(status==0 && square*square<x){
            i=i*i;continue;
        }
        status=1;
    }
    return i<1? 0:i-1;    
};

1017 / 1017 个通过测试用例
执行用时:164 ms

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值