LeetCode 20200215(x的平方根)

1.x的平方根
这道题本身不难 因为就涉及到二分法来求根
但是因为我所做的二分法时间超出限制

注意1:首先要想到这个平方根一定不会大于x/2+1 因此右端是x/2+1
然后 我的想法是判断是否等于
其实是应该在左小于右就循环
然后呢 当平方等于的时候刚好return 如果没找到那就大小 大了 就mid-1
小了就mid+1
注意2: 这个需要的是 用 long long 类型而不是int

下面是我的方法经过修正之后的AC版本

class Solution {
public:
    int mySqrt(int x) {
        long long mid;
        long long mul;
        if(x==0){return 0;}
        else if(x==1 || x==2 || x==3){
            return 1;
        }
        else {
            long long  left=1;
            long long right=x/2+1;
            mid=(left+right)/2;
            mul=mid*mid;
            while(left<=right){
                if(mul==x){return mid;}
                else if(mul<x){
                    left=mid+1;
                    
                    
                }
                else{
                    right=mid-1;
                }
                mid=(left+right)/2;
                mul=mid*mid;

            }
        }
        return mid;
    }
};
发布了60 篇原创文章 · 获赞 9 · 访问量 3961

猜你喜欢

转载自blog.csdn.net/puying1/article/details/104327875