栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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


文章目录
  • LeetCode高频题1:二分法求开根号sqrt(x),保留3位小数,速度快,简单
    • @[TOC](文章目录)
  • 题目
  • 一、审题
  • 二分法直接实现 double sqrt(double n) 函数。
  • 总结
题目

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

实现 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 (2)如果midmid >=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够大了,需要往左逼近,下一次让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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号