使用二进制搜索查找数字的平方根

问题描述 投票:0回答:1

[我尝试使用二进制搜索来找到整数的平方根,但是有些我无法通过一些测试用例。

我能够通过mySqrt(4)= 2,但是我无法通过mySqrt(2147395599)

关于我搞砸的任何想法?

public static int mySqrt(int x) {
        int left = 0;
        int right = x;

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

            if(mid * mid == x){
                return mid;

            }
            else if(mid * mid < x){
                left = mid + 1;
            }
            else{
                right = mid; 
            }
        }
        return left - 1;
    }
java binary-search square-root
1个回答
0
投票

因为中*中会溢出。您应该使用很长时间以避免溢出。然后在返回结果时将其强制转换为int。

© www.soinside.com 2019 - 2024. All rights reserved.