69. x 的平方根(C語言/C++)---牛頓迭代法 和 二分法

題目詳情
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。

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

示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842..., 
    由於返回類型是整數,小數部分將被捨去。


——題目難度:簡單


 


 

-牛頓迭代法解題(C語言)

int mySqrt(int x){
    if(x<2)	return x;
    double x1=x;
    double fang=x1*x1;
    //int eps = 1;
    while((long long)fang>(long long)x){      //當x1*x1<=x的時候可以退出循環(可以理解爲一個作用域), 但也要小心越界
		x1=0.5*(x/x1 + x1);
		fang=x1*x1;
    }
    return (int)x1;
}

結果

 


-二分法解題(C++)

大致思路:因爲要返回的是x的平方根的整數部分(設爲k),其實k就是要滿足 k*k<=x 的最大值,用這條語句實現👉( l = mid + 1; //不斷更新l的值,也就是更新滿足條件的k值的最大值)

代碼如下

class Solution {
public:
    int mySqrt(int x) {
        int l = 0, r = x, ans = -1;
        while(l<=r) {
        	int mid = (l+r)/2;
        	if( (long long)mid*mid <= x) {
        		 ans = mid;
                         l = mid + 1; //不斷更新l的值,也就是更新滿足條件的k值的最大值
        	} else {
        		r = mid - 1;
        	}
   	}
        return ans;
    }
};

結果

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章