1. 程式人生 > >【JS】 求x 的平方根 #數學 #二分查詢

【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