JAVA 牛客网 NC32求平方根

该代码使用二分查找算法来计算整数x的平方根。特别处理了x小于2的特殊情况,通过不断缩小搜索区间,最终找到平方根的下界left。为了避免死循环和溢出,计算中点mid时采用了特定公式。当left和right相遇时,返回left作为平方根的值。
摘要由CSDN通过智能技术生成

 

题目如图:

 先展示代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param x int整型
     * @return int整型
     */
    public int sqrt (int x) {
        if(x<2){
            return x;
        }

        int left = 1;
        int right = x / 2;

        while (left < right) {
            int mid = left + (right - left+1) / 2;
            int temp = x / mid;
            if (mid <= temp) {
                left = mid;
            } else{
                right=mid-1;
            }
        }
        return left;
    }
}

         该代码使用的方法是二分法

        思路:

                1.因为当x取0或1时,0或1的平方根都是自身,所以先将这两个特殊情况筛选出来

                2.由于是向下取整,所以除了0和1以外,x的平方根最大肯定都不会超过自身的一半,因此x平方根的取值范围是1-x/2

                3.求出在left和right中的中点mid,但计算mid时要用(left+right+1)/2,因为(left+right)/2在很多情况下会造成死循环(不相信可以代入4或9尝试一下),而mid = left + (right - left+1) / 2则是为了防止溢出的写法

                4.通过temp=x/mid所得到的值与mid进行比较可以判断mid此时对于x的平方根来说是小还是大,如果mid的值大于temp就说明mid较大,反之则较小,但由于是向下取整,所以当mid较小时也有可能是要取得的平方根所以取范围的右边时设left=mid,但若mid较大,该mid就不可能是满足条件的,所以取范围的左边时取right=mid-1

                5.当left与right相遇时便得到了x的平方根,返回left的值即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小林想被监督学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值