LeetCode 69. x 的平方根 【二分查找】

題目描述

實現 int sqrt(int x) 函數。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

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

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,

  • 由於返回類型是整數,小數部分將被捨去。

解題思路

我們可以把這道題想象成,給定一個非負整數 a,求 f(x) = x2 −a = 0 的解。因爲我們只考慮 x ≥ 0,所以 f(x)在定義域上是單調遞增的。考慮到 f(0) = −a ≤ 0,f(a) = a2 −a ≥ 0,我們可以對[0,a]區間使用二分法找到 f(x) = 0的解。

注意,在以下的代碼裏,爲了防止除以0,我們把 a = 0的情況單獨考慮,然後對區間[1,a] 進行二分查找。

使用了左閉右閉的寫法。

AC

class Solution {
public:
    int mySqrt(int x) {
        if(x==0) return 0;
        long left=1,right=x,ans;
        long mid;
        while(left<=right){
            mid = (left+right)/2;
            ans = x/mid;
            if(ans == mid) return ans;
            else if(ans < mid) right = mid-1;
            else left = mid+1;
        }
        return right;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章