力扣题库(LeetCode)(69.x的平方根)

69.x的平方根
实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

力扣题库(LeetCode)(69.x的平方根)_第1张图片
解题思路:
1.使用二分法,不断逼近x的平方根;
2.注意数据溢出和时间超限问题,尽可能不让数据做乘法;
3.用除法来代替乘法,需要注意的是x的平方根不会大于x/2(0,1单独处理).

class Solution {
public:
    int mySqrt(int x) {
        int i=x/2,j=1;
        while(i>=j){
        //确定x的平方根从[1,x/2]当中产生,为了进一步提高速度,从这个区间mid/2进行运算
            mid=int((i+j)/2);
            if (x/mid==mid)
                return mid;
            else if(x/mid>mid && x/(mid+1)<(mid+1))
                return mid;
                //当选择mid作为平方根都大的时候,范围就缩小到[1,mid-1]
            else if (mid > x / mid)
                i=mid-1;
                //当选择mid作为平方根都小的时候,范围就缩小到[mid+1,i]
            else
                j=mid+1;}
        //0,1的情况
        return x;}
};

你可能感兴趣的:(C++)