Pay attention to that mid * mid may be larger than int. So long long is enough.
class Solution {
public:
int sqrt(int x) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int l = 0, r = x;
while (l <= r) {
int mid = (l + r) / 2;
long long mid2 = (long long)mid * (long long)mid;
long long mid12 = (long long)(mid + 1) * (long long)(mid + 1);
if (mid2 <= x && mid12 > x)
return (int)mid;
if (mid2 > x)
r = mid -1;
else
l = mid +1;
}
}
};

本文介绍了一种用于寻找整数平方根的有效算法。通过使用二分查找的方法,并注意处理乘法运算可能导致的溢出问题,该算法能够在长整型范围内准确地找到目标值的平方根。
836

被折叠的 条评论
为什么被折叠?



