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;
}
};