您的位置:首页 > 其它

lintcode-141 x的平方根

2017-08-13 00:00 141 查看
原题链接:http://www.lintcode.com/zh-cn/problem/sqrtx/

实现
int sqrt(int x)
函数,计算并返回 x 的平方根。

样例

sqrt(3) = 1

sqrt(4) = 2

sqrt(5) = 2

sqrt(10) = 3

直接上代码吧

class Solution {
/**
* @param x: An integer
* @return: The sqrt of x
*/
public int sqrt(int x) {
// write your code here
int low = 1;
int high = x;
int mid = 0;

while (low <= high) {
mid = low + (high - low) / 2;
if (mid == x / mid) {
return mid;
} else if (mid > x / mid) {
high = mid;
} else {
low = mid;
}

if ((low < x / low) && (high > x / high) && (low == high - 1)) {
return low;
}
}

return 0;
}
}

主要是利用二分的思想,但是有些和二分不一样,就是当mid > x / mid时,high = mid, 而不是high = mid - 1.

另外一个特别需要注意的地方就是数的范围,之所以写成mid == x / mid, 还有后面的 mid > x / mid, low < x / low, high > x / high, 是因为如果两个int直接相乘,结果会超过Integet.MAX_VALUE, 导致出错,所以改用除法。还有mid = low + (high - low) / 2也是一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lintcode 二分