69. x 的平方根

类似:乐鑫笔试题-----开根号


 

69. x 的平方根_第1张图片


相对于二分查找法,根据题意添加了一些条件

class Solution {
public:
    int mySqrt(int x) {
        if(x==0)return 0;
        if(x==1)return 1;
        int L=1;
        int R=x;//x大于等于2的时候,它的平方根一定是在左半边[1,x/2]
        
        while(L<=R)
        {
            int mid=L+(R-L)/2;
            //不能直接mid*mid,防止越界
            //根据题意,有小数点的小数点抹去
            if(x/mid==mid||(x/mid>mid&&x/(mid+1)<(mid+1)))return mid;
            else if(x/mid>mid)L=mid+1;
            else R=mid-1;
        }
        return -1;

    }
};

class Solution {
public:
    int mySqrt(int x) {
        if(x==0)return 0;
        if(x==1)return 1;
        int L=1;
        int R=x/2;//x大于等于2的时候,它的平方根一定是在左半边[1,x/2]
        int mid=R;//初始mid为R
        while(Lmid&&x/(mid+1)<(mid+1)))return mid;
            else if(x/mid>mid)L=mid+1;
            else R=mid-1;
            //避开了越界问题
            mid=L+(R-L)/2;

        }
        //while循环中只是在 L

 

你可能感兴趣的:(算法题)