leetcode学习打卡--69. x 的平方根(蛮力/二分/(边界溢出处理))

69. x 的平方根

这题是个简单题,而且蛮力也可以解,就特殊数据涉及边界情况处理一下就好。算半个水题。


实现 int sqrt(int x) 函数。

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

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


测试样例-我给多几组(基本这些都对就没问题了)

测试输入:
4
8
3
2147483647
10
0
1
测试输出:
2
2
1
46340
3
0
1

蛮力法:击败13% 汗颜

思路:直接从1到x/2+1遍历查找 找到就break

class Solution {
public:
    int mySqrt(int x) {
        long long res=1;
        for(long long i=1;i<=x/2+1;i++)
        {
            long long temp=i*i;
            if(temp==x||temp>x)
            {
                res=i;break;
            }
        }
    if(res*res==x) return res;
    return res-1;
    }
};
二分法:双百

思路:二分查找,但是要处理0 1输入和返回条件的设置
譬如输入8 初始 下界=1 上界=5 中值=3

下界 上界 中值 中值平方
1 5 3 9(大于)
1 3 2 4(小于)
2 3 2 4(死循环)

所以考虑 当上界=下界+1时 return下界避免死循环

class Solution {
public:
    int getnum(int l,int r,int x)
    {     
        if(r==l+1) return l; //注意
        long long mid=(l+r)/2;
        long long temp=mid*mid;
        if(temp>x) return getnum(l,mid,x);
        if(temp<x) return getnum(mid,r,x);
        return mid;
    }

    int mySqrt(int x) {
        if(x==0) return 0;
        int res=getnum(1,x/2+1,x);
        return res;
    }
};

你可能感兴趣的:(LeetCode学习打卡,leetcode,c++,二分法)