LeetCode高频题:二分法求开根号sqrt(x),保留3位小数,速度快,简单

LeetCode高频题:二分法求开根号sqrt(x),保留3位小数,速度快,简单

提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目
互联网大厂们在公司养了一大批ACM竞赛的大佬们,吃完饭就是设计考题,然后去考应聘人员,你要做的就是学基础树结构与算法,然后打通任督二脉,以应对波云诡谲的大厂笔试面试题!
你要是不扎实学习数据结构与算法,好好动手手撕代码,锻炼解题能力,你可能会在笔试面试过程中,连题目都看不懂!比如华为,字节啥的,足够让你读不懂题
在这里插入图片描述


题目

经典面试题:手动开根号,手撕代码

实现 int sqrt(int n) 函数。或者double n

计算并返回 的平方根,其中 是非负整数。n也可以是double类型

n整型时:由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
n是double时,保留小数点后3位


一、审题

示例:
输入:
4
输出:
2

输入:
8
输出:
2
解释:
8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

但是你也可以考虑保留为2.828


二分法直接实现 double sqrt(double n) 函数。

也就是求出 的精确值

这就是很普通的二分法

举个例子,n
你直接在0–n之间找中点,看看中点的平方是不是n?
(0)mid=(l+r)/2
(1)如果midmid <n,说明mid太小,需要往右找,下一次让l=mid,去(0)
(2)如果mid
mid >=n,说明mid够大了,需要往左逼近,下一次让r=mid,去(0)
(3)直到r-l的差值精度在10的-3次方:1e-3,说明位小数点成了
在这里插入图片描述

手撕代码试试:

    //你直接在0--n之间找中点,看看中点的平方是不是n?
    public static double sqrtFunc(double n){
        double l = 0;
        double r = n;
        double mid = 0;
        while (r - l > 1e-6){//精度不够,继续找
            //(0)mid=(l+r)/2
            mid = l + ((r - l) / 2);
            //(1)如果mid*mid <n,说明mid太小,需要往右找,下一次让l=mid,去(0)
            if (mid * mid < n) l = mid;
            else r = mid;
            //(2)如果mid*mid >=n,说明mid够大了,需要往左逼近,下一次让r=mid,去(0)
            //(3)直到r-l的差值精度在10的-3次方:1e-3,说明位小数点成了
        }

        return mid;
    }

    public static void test(){
        double n = 8;
        System.out.println(String.format("%.3f", sqrtFunc(n)));
    }

    public static void main(String[] args) {
        test();
    }

2.828

问题不大

据说还有啥牛顿法,梯度下降法,但是二分法最简单


总结

提示:重要经验:

1)二分法求开根号sqrt(x),保留3位小数,速度快,简单
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值