求平方根 && 牛顿迭代法

LC P69

公式

牛顿迭代法

二分

class Solution {
public:
    int mySqrt(int x) {
        if(!x)  return 0;
        // 注意题目的意思就相当于对double下取整数
        // 但我们不能用double,因为double精度不准确
        // sqrt(4)=2,但在double上可能是1.99999999....

        // 使用整数时要避免溢出的情况
        // 由于是下取整,因此答案是<=的情况,故left bound二分
        int l = 0, r = x;
        while(l < r) {
            int mid = l + 1 + (r - l - 1) / 2;  // 避免溢出
            if(mid > x / mid)  // 避免溢出   
                r = mid - 1;
            else    l = mid;
        }
        return l;
    }
};
posted @ 2024-04-25 11:17  光風霽月  阅读(2)  评论(0编辑  收藏  举报