19. x 的平方根
题目描述
计算并返回 x 的平方根的整数部分。

题目示例
输入: 4 输出: 2
输入: 8 输出: 2 说明: 8 的平方根是 2.828...,取整后为 2。

解法思路
设 x 的平方根结果为 index。观察 index 两侧数据的特性:
- [0, index] 区间内的元素,平方后都小于等于 x;
- [index+1, x] 区间内的元素,平方后都大于 x。
这种单调性非常适合使用二分查找来逼近结果。我们不需要找到精确的小数,只需要找到满足条件的最大整数即可。
代码实现
class Solution {
public:
int mySqrt(int x) {
int left = 0;
int right = x;
while (left < right) {
// 注意 mid 的计算方式,防止溢出
// 当 right=INT_MAX 时,right - left + 1 可能超出 int 范围
// 所以强转成 long long 类型
int mid = left + ((long long)right - left + 1) / 2;
if ((long long)mid * mid <= x) {
left = mid; // 满足条件,尝试更大的值
} else {
right = mid - 1; // 不满足,缩小右边界
}
}
left;
}
};






