如果数学好的人,看到这个题目会有很多种方法,我这个菜鸡就想到了暴力和二分,orz
先上暴力:
int mySqrt(int x)
{
long long i = 1;
while((i*i)<=x)
{
i++;
}
return i-1;
}
明显速度很慢
二分:
int mySqrt(int x)
{
int left = 0;
int right = x / 2 + 1;
while (left <= right)
{
long long mid = (left + right) / 2;
long long res=mid*mid;
if (res == x)
{
return mid;
}
if (res < x)
{
left = mid + 1;
}
if (res > x)
{
right = mid - 1;
}
}
return right;
}
二分就好很多啦
ps:原来内存多销耗了0.1MB相差47.23%这么多