【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

猜你喜欢

转载自blog.csdn.net/sphinx1122/article/details/84197148