求平方根
class Solution {
public int mySqrt(int x) {
int l = 0, r = x, ans = -1;
while (l <= r) {
int mid = l + (r - l) / 2;
if ((long) mid * mid <= x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}
总结:
- l和r分别代表搜索范围的左边界和右边界。
- mid是l和r的中间值。
- 如果mid * mid <= x,说明mid可能是平方根,或者平方根比mid大,所以更新ans = mid,并将左边界l移动到mid + 1,继续在右半部分搜索。
- 如果mid * mid > x,说明平方根比mid小,所以将右边界r移动到mid - 1,继续在左半部分搜索。
- 当l > r时,搜索范围为空,循环终止,此时ans 存储的是最接近x的整数平方根。
评论区