0
点赞
收藏
分享

微信扫一扫

LeetCode_69. x 的平方根_二分查找

七千22 2022-04-04 阅读 60

错误版本:
Line 8: Char 14: runtime error: signed integer overflow: 46341 * 46341 cannot be represented in type 'int' [solution.c]
会有溢出!!!!

int mySqrt(int x){
/*
    循环+if判断
*/
    int ans = 0;
    int temp=0;
    for(int i=0;i<=x;i++){
        temp = ans*ans;
        if(temp==x){
            return ans;
        }else if(temp>x){
            return ans-1;
        }
        ans+=1;
    }
    return ans;
}

正确版本:

int mySqrt(int x){
/*
    循环+if判断
    利用二分查找找到中间值mid mid mid....  
    找到某个值的平方等于或者没找到则返回最大的一个平方小于x的即退出循环的right
*/
    int left=1;
    int right=x;
    while(left<=right){
        //
        int mid=left+(right-left)/2;
        if(mid<x/mid){
            left=mid+1;
        }else if(mid==x/mid){
            return mid;
        }else if(mid>x/mid){
            right=mid-1;
        }
    }
    return right;
}
举报

相关推荐

0 条评论