LeetCode69x的平方根-----二分法
题目表述
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例:
输入:x = 4
输出:2
二分法
二分查找的下界为 00,上界可以定为X/2+1。在二分查找的每一步中,我们只需要比较中间元素mid 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算,不会存在误差,最后当right和left相等时,在判断一次即可返回right,为什么不是返回left? 因此最终left > right,需要返回平方根的整数部分,x的平方根大小是在right-left之间的,所以返回right即可。
class Solution {
public int mySqrt(int x) {
int left = 0;
int right = x / 2 + 1;
while(left <= right){
int mid = left + (right - left) / 2;
if((long)mid * mid == x){
return mid;
}else if((long) mid * mid > x){
right = mid - 1;
}else{
left = mid + 1;
}
}
return right;
}
}