求平方根 && 牛頓迭代法

光風霽月發表於2024-04-25

LC P69

公式

牛頓迭代法

二分

class Solution {
public:
    int mySqrt(int x) {
        // 注意題目的意思就相當於對double下取整數
        // 但我們不能用double,因為double精度不準確
        // sqrt(4)=2,但在double上可能是1.99999999....

        // 使用整數時要避免溢位的情況
        // 由於是下取整,因此答案是<=的情況,故left bound二分
        int l = 0, r = x;
        while(l < r) {
            int mid = l + (r - l) / 2;  // 避免溢位
            if(mid >= x / mid)  // 避免溢位   
                r = mid;
            else    l = mid + 1;
        }
        return l;
    }
};

相關文章