leetcode69 -- Sqrt(x)Java

题目描述
在这里插入图片描述
方法一:
一种用指数函数exp和对数函数ln代替平方根函数的方法
在这里插入图片描述
代码实现:

class Solution {
    public int mySqrt(int x) {
        // 方法一:一种用指数函数exp和对数函数ln代替平方根函数的方法
        if (x == 0){
            return 0;
        }
        int ans = (int)Math.exp(0.5 * Math.log(x));
        // 数字可能太大,最好使用长整型进行强制类型转换,进行log运算一般会出现小数,
        // 因为有小数,正确答案和原始的差距肯定是不超过1的,在进行比较的时候,也只需要将前面一个进行强制类型转换
        return (long)(ans + 1) * (ans + 1) <= x ? ans+1 : ans;
    }
}

方法二:
在这里插入图片描述
代码实现:

class Solution {
    public int mySqrt(int x) {
        // 方法二:涉及到平方,一般可以想到用二分查找的思想
        // 在二分查找的每一步当中,我们只需要比较中间元素mid的平方和x之间的大小关系
        // 并通过比较的结果调整上下界的范围,二分运算界限都是通过界限,都是整数,不会存在误差
        int l = 0, r = x, ans = -1;
        while (l <= x){
            int mid = l + (r - 1) / 2;
            if ((long)mid * (long)mid <= x){
                ans = mid;
                l = mid + 1;
            }else{
                r = mid - 1;
            }
        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值