java练习(11)
ps:题目来自力扣
给你一个非负整数 x
,计算并返回 x
的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5)
或者 x ** 0.5
。
class Solution {
public int mySqrt(int x) {
// 处理 x 为 0 的特殊情况,0 的算术平方根是 0
if (x == 0) {
return 0;
}
// 初始化左右边界,左边界为 1,右边界为 x
int left = 1;
int right = x;
int result = 0;
// 二分查找
while (left <= right) {
// 计算中间值
int mid = left + (right - left) / 2;
// 避免 mid * mid 可能导致的整数溢出,改用 x / mid 来比较
if (mid <= x / mid) {
// 如果 mid 的平方小于等于 x,更新结果为 mid,并将左边界右移
result = mid;
left = mid + 1;
} else {
// 如果 mid 的平方大于 x,将右边界左移
right = mid - 1;
}
}
return result;
}
}