一、问题描述
Implement int sqrt(int x)
.
Compute and return the square root of x.
二、问题分析
求一个正数的平方根,最笨的方法就是从0到x挨个试。显然会超时,那么重新考虑一下,从0-x这不是一个有序的数组吗?因此可以采用二分查找法。需要注意的就是从0-x求平方的过程可能会溢出,因此平方值用long来存储即可。
三、Java AC代码
public int mySqrt(int x) {
int low = 0;
int high = x;
long mid;
while(low<=high){
mid = (low+high)/2;
if (mid*mid==x) {
return (int)mid;
}else if (mid*mid > x) {
high = (int) (mid - 1);
}else
low = (int) (mid + 1);
}
return high;
}