Implement int sqrt(int x).
Compute and return the square root of x.
此代码在leetcode上实际执行时间为16ms。
基本思路为二分法。
由于二段式二分法,退出循环时,有两种情况,一是精确匹配,二是精确值不存在情况下,指向稍大一点的。故函数返回时需要判断一下。
另外一点需要注意的是,作判断时,不能用 mid * mid < x, 而是要写成 mid < x / mid。 因为剩法会溢出,而除法不会溢出。
class Solution {
public:
int sqrt(int x) {
if (!x) return x;
int l = 1, h = x;
while (l < h) {
const int mid = l + (h - l) / 2;
if (mid < x / mid)
l = mid + 1;
else
h = mid;
}
return l == x / l ? l : l - 1;
}
};原文地址:http://blog.csdn.net/elton_xiao/article/details/44940387