• 力扣打卡之X的平方根


    题目描述

    在不使用sqrt(x)函数的前提下,得到x的平方根

    解题思路

    方法一:二分法

    所谓二分法就是每次找到当前数组的最中间的值,然后将最中间的值的平方根和我们的需求作比较,如果中间的值的平方根大于我们需求的值就往左边找,反之往右边找!!!

    方法二:牛顿迭代

    什么是牛顿迭代?其实看完之后我还是有点懵

    然后我就去研究了一下,所谓牛顿迭代就是利用无限次切线最后求得曲线的解!

    其实研究起来挺简单的,可以参考这个文章

    牛顿迭代法 - 知乎 (zhihu.com)

    然后具体描述一下牛顿迭代法在java中是怎么使用的

    在这里,我们也是通过无限次的求解来得到最后的结果

    我们举一个例子

    因此,我们利用上面的方法就可以最后得到我们想要的所有的结果了!

    代码展示

    方法一:二分法

    1. public int BinarySearch(int x){ //首先我们要找x的平方根我们就要知道它的范围应该是[0,x-1]
    2. int index=-1;
    3. int l=0,r=x-1;
    4. while(l<=r){
    5. int mid=l+(r-l)/2;
    6. if(mid*mid<=x)
    7. { index=mid;
    8. l=mid+1;
    9. }
    10. else r=mid-1;
    11. }
    12. return index;
    13. }

    方法二:牛顿迭代

    1. public int newton(int x){
    2. if(x<=0) return 0;
    3. return (int)sqrt(x,x); //这里需要向下转型,因为我们需要的是int类型的,但是返回的却是double
    4. }
    5. public double sqrt(double i,int x)
    6. {
    7. double res=(i+x/i)/2;
    8. if(res==i) return i; //当我们求得的值和我们输入的值一样的时候,我们就得到了最后的结果
    9. else{
    10. sqrt(res,x);
    11. }
    12. }

    总结

    这个题目主要考察牛顿迭代

    我们要知道,需要找某个范围内的某个值的时候我们就可以使用二分法

  • 相关阅读:
    JDK1.7和JDK1.8中HashMap线程不安全的原因详解
    Promise击鼓传花的游戏
    tftpd文件传输工具的学习记录
    【C++基础】2. 标准库
    Java零基础入门-大数
    openssl交叉编译 (ubuntu+arm)
    旅游网站大数据分析 - 数据抓取
    山西电力市场日前价格预测【2023-11-19】
    对计算思维的培养
    机器学习——KNN算法
  • 原文地址:https://blog.csdn.net/young_man2/article/details/126538587