Sqrt(x)
题目:计算X均方根
思路:二分法
二分法不再累赘,只是想说的,程序的一个巧妙的地方在于,溢出的时候,他的开方值是46340,也就是说,我本程序最大的结果最大为46340,而我对应的那个原来的数最大只可能是46340*2,这就是程序里面(x/2>=46340)有本条语句的原因。
代码:
class Solution {
public:
int mySqrt(int x) {
if(x<=0) return 0;
if(x<4) return 1;
if(x/2>=46340){
return binaryLowInt(x,0,46340);
}
return binaryLowInt(x,0,x/2);
}
int binaryLowInt(int x,int left,int right){
if(left>right){
return right;
}
int mid=(left+right)/2;
if(mid*mid==x){
return mid;
}
if(mid*mid>x){
return binaryLowInt(x,left,mid-1);
}
if(mid*mid<x){
return binaryLowInt(x,mid+1,right);
}
}
};

浙公网安备 33010602011771号