散题Sqrt(x)

int mySqrt(int x){
    int left=1,right=x;
    while(left<=right){
        int mi = left + (right-left)/2;
        int sqrt = x/mi;
        if(sqrt<mi){
            right = mi-1;
        }else if(mi<sqrt){
            left = mi+1;
        }else if(mi==sqrt){
            return mi;
        }
    }
    return right;
}

TIPS: left + (right - left) / 2 无法写成 left + (right - left) >> 1

解释:binarysearch查找一个相近的数字,注意条件:条件是用x和mi^2做判断的,用sqrt = x / mi防止数据溢出,还有return也要注意。

        1.return right:因为right作为较小数。

        2.x和mi^2做判断:因为sqrt()函数。

   当mi^2在x左边的时候,因为再缩范围就没有办法在平方等于x了,所以范围往右走Left = mi + 1

   同理,当mi^2在x右边的时候,范围往左走Right = mi -1。

            

猜你喜欢

转载自blog.csdn.net/rick030224/article/details/122353942