x的平方根
题目
实现 int sqrt(int x) 函数,计算并返回 x 的平方根。
样例
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
挑战
O(log(x))
题解
看挑战的要求肯定是二分法了,思路很简单,注意溢出即可。
class Solution {
/**
* @param x: An integer
* @return: The sqrt of x
*/
public int sqrt(int x) {
int low = 0;
int high = x;
while (low <= high)
{
int mid = low + (high - low) / 2;
long square = (long)mid * (long)mid;
if (square == x)
{
return mid;
}
else if (square > x)
{
if ((long)(mid - 1) * (long)(mid - 1) < x)
{
return (mid-1);
}
high = (int)mid - 1;
}
else
{
if ((long)(mid + 1) * (long)(mid + 1) > x)
{
return (int)(mid);
}
low = mid + 1;
}
}
return -1;
}
}
Last Update 2016.9.7