java算法之Sqrt of x

问题:Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x.


思路:1.暴力求解,从最小遍历到x/2,然后看哪个数的平方,等于目标的值。

2. 用二分查找法,寻找sqrtx的值。

用第二种方法的巧妙之处就在于,可以把原数x看成一个从0到x的数组,然后用二分法,查找数组里面的某个值,可以减少比较次数。。

代码:

	public static int sqrt(int x) {
        int low = 0;
        int high = x;
        while(low<=high){
            long mid = (long)(low + high)/2;
            if(mid*mid < x)
                low = (int)mid + 1;
            //注意这里一定要用else if ,不能直接另启用一个if,这样的话,当执行完上一个if后还要判断这个if语句,还要后面的else
            else if(mid*mid > x)
                high = (int)mid - 1;
            else
                return (int)mid;
        }
        return high;
    }
注意 :因为leetcode的test case x=2147395599,在算mid*mid的时候造成溢出,所以mid不能使用int型来接,要使用long型防止溢出(Java中Integer型的范围:-2147483648 到2147483648)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值