【LeetCode】69. x 的平方根

69. x 的平方根

知识点:二分查找;数学

题目描述

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例
输入: 4 输出: 2 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

解法一:二分查找;

由于此题是只返回整数部分就可以,所以可以使用二分查找,也就是找到k^2 <= x 的最大k值;所以可以使用二分查找来得到答案;
注意细节

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

解法二:数学

这道题目可以使用牛顿迭代法,用来快速求零点。求一个数的平方根,其实就是求x^2-C的零点,所以可以从一个初始点开始,不断的向零点进行逼近。
任取一个初始点x0,找到它在图像中的位置,然后对其做切线,求切线的零点xi,那这个xi比x0更靠近零点;然后这样不断迭代,知道满足某精度;

image

根据数学可以求出这条切线的左边,也就是xi的值;

0.5 * (x0 + C / xo);

class Solution { public int mySqrt(int x) { if(x == 0) return 0; double C = x, x0 = x; while(true){ double xi = 0.5*(x0 + C / x0); if(Math.abs(x0 - xi) < 1e-7){ break; } x0 = xi; } return (int)x0; } }

相关链接

x的平方根


__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15100037.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】69. x 的平方根』
点击右上角即可分享
微信分享提示