奢侈品网站建设方案/刷网站seo排名软件

   日期:2024-12-25    作者:zmy089 移动:http://oml01z.riyuangf.com/mobile/quote/21756.html

实现 int sqrt(int x) 函数。

奢侈品网站建设方案/刷网站seo排名软件

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

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

示例 1:

输入: 4
输出: 2

示例 2:

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

解法一使用二分查找法,对中间数进行判断,如果mid^2 <= x 且 (mid+1)^2>x,则说明int(mid)即为所求

在Python3中  *  代表乘法** 代表乘方

解法二

算法牛顿迭代法(详细解释可自行查询)。
在这简单介绍一下
求一个值 a 的平方根,那么首先令 x = a,然后不断令 x = (x + a/x)/2,这样迭代几次之后得到的数值就趋近于准确值了。

 

以下是Java版本

题意算一个数的平方根。

注意点就是:取中值相乘,有可能会超过整数的最大范围,所以比较的时候就会出错。所以在定义的时候全部定义为long

这道题很巧妙的运用了二分查找法的特性,有序,查找pos(在这道题中pos=value,找到返回pos,找不到返回邻近值。

因为是求数xx>=0) 的平方根 因此,结果一定是小于等于x且大于等于0,所以用二分查找法肯定能搜到结果。

以每一次的mid的平方来与target既数x相比

如果mid*mid == x,返回mid

如果mid*mid < x,那么说明mid过小,应让low = mid+1,在右边继续查找

如果mid*mid > x,那么说明mid过大,应让high = mid-1,在左边继续查找

x无法开整数根号(在上述查找中没有找到,那么我们仍然可以利用之前对二分查找法总结的技巧,当target值不在数组中low指向大于target的那个值high指向小于target的那个值,由于我们需要向下取整的结果,所以我们返回high指向的值(这里high指向的值和high的值是同一个值,这个值就是所求得最接近起开根号结果的整数值。

因为leetcodetest case x=2147395599,在算mid*mid的时候造成溢出,所以mid不能使用int型来接,要使用long型防止溢出JavaInteger型的范围-2147483648 2147483648


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号