力扣69. x 的平方根(java二分法)
思路: 只要是 >=4 的数,平方根肯定小于等于它的一半,根据这个思路,我们可以选择二分法。
public int mySqrt(int x) {
//排除影响条件
if(x == 0){
return 0;
}
if(x < 4){
return 1;
}
//二分法求解
int left = 1,right = x/2;
//需要注意的是这里要用long 否则乘法会溢出 导致得到负值 影响循环
long medium = 0;
while(left <= right){
medium = (left+right)/2;
if(medium*medium > x){
right = (int)medium-1;
}else if(medium*medium < x){
left = (int)medium+1;
}else{
return (int)medium;
}
}
return right;
}