解题思路:
1.利用二分法查找num,只要找到满足num*num==x或者num*num>x的数,即此时的num或者num-1便是我们要找的数
2.在查找的过程中不要用乘法,用除法来找我们要找的数字,因为乘法会导致数溢出,使得数字变成负数,进而进入死循环,导致超时
我在查找的过程中就犯了乘法溢出的错误。
代码实现如下:
class Solution {
public int mySqrt(int x) {
if(x==1||x==0){
return x;
}
int res=0;
int left=0;
int right=x;
while(left<=right){
int mid=(left+right)/2;
if(x/mid==mid){
res=mid;
break;
}
else if(x/mid>mid){
if(x/(mid+1)<(mid+1)){
res=mid;
break;
}
left=mid+1;
}
else{
right=mid-1;
}
}
return res;
}
}