Implement int sqrt(int x)
.
Compute and return the square root of x.
写出自己的求根算法,一开始想到的是二分搜索,看看时间发现这不是很好的方法。然后看一下讨论,可以用数值分析中学过的牛顿法来求根(果然不用就会忘)。
二分搜索:
class Solution {
public:
int mySqrt(int x)
{
int left=0,right=46341,mid;
while(left<right)
{
mid=(left+right)/2;
if(mid*mid==x) return mid;
else if(mid*mid>x) right=mid-1;
else left=mid+1;
}
return (left*left<x)?left:left-1;
}
};
牛顿法:
class Solution {
public:
int mySqrt(int x)
{
long long y=x;
while(y*y>x) y=(y+x/y)/2;
return y;
}
};