0%

69. Sqrt(x)

69. Sqrt(x)

Newton's method
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
int mySqrt(int x) {
long r = x;
while(r * r > x)
{
r = (r + x / r) / 2;
}
return r;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int mySqrt(int x) {
int lo = 0, hi = x;
while(lo < hi)
{
int mid = lo + (hi - lo) / 2 + 1; // 使得中点偏向右边,防止无限循环
if(mid <= x / mid)
lo = mid;
else
hi = mid - 1;
}
return hi;
}
};

Tips:usemid > x / mid instead of mid * mid > x, because of the overflow