leetcode 69. x 的平方根

leetcode 69. x 的平方根_第1张图片

方法一 转换公式

leetcode 69. x 的平方根_第2张图片

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0)
            return 0;
        int ans = exp( 0.5 * log(x));
        if ((long long) (ans + 1) * (ans + 1) <= x)
            ans = ans + 1;
        return ans;
    }
};

时间复杂度:O(1)
空间复杂度:O(1)。

方法二 二分法

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) return 0;
        int left = 0, right = x, ans = -1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if ((long long) mid * mid <= x) {
                ans = mid;
                left = mid + 1;
            }
            else 
                right = mid - 1;
        }
        return ans;
    }
};

时间复杂度:O(logx)
空间复杂度:O(1)。

你可能感兴趣的:(数据结构与算法,leetcode,算法)