您的位置:首页 > 其它

LeetCode 第 69 题 (Sqrt(x))

2016-04-23 18:02 190 查看

LeetCode 第 69 题 (Sqrt(x))


Implement int sqrt(int x).

Compute and return the square root of x.



求 x 的平方根。我们知道 是单调增函数, 。所以可以用二分查找法来计算。

int mySqrt(int x)
{
if(x <= 0) return 0;
int a1 = 1;
int a2 = 46341 * 2 - 1;
unsigned int a, y;
if(a2 > x / 2) a2 = x;
do
{
a = (a1 + a2) / 2;
y = a * a;
if(y == x) return a;
if(y > x)
{
a2 = a;
}
else
{
a1 = a;
}
}while(a1 + 1 < a2);
a = (a1 + a2) / 2;
return a;
}


这个程序比较讲究的地方是 a2 = 46341 * 2 - 1 。之所以这么去是为了使第一次循环时 a = (a1 + a2) / 2 = 46341。

46341 是个比较特殊的数, 大于 INT_MAX 的最小的整数的平方数。这样可以保证这个二分查找法能覆盖所有整数范围,并且保证循环次数是最少的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: