https://leetcode.cn/problems/search-insert-position/
1.题目描述
给你一个非负整数 x
,计算并返回 x
的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5)
或者 x ** 0.5
。
示例 1:
输入:x = 4 输出:2
2.解题思路
这道题可以使用二分查找算法来做
1.定义 left=0,right=x,mid=left+(right-left+1)/2
因为是求某个数的算数平方根,去掉小数部分,此时可以利用二分查找中的右边界查找来解答
-
当 mid*mid <= x 时,需要改变 left,使 left = mid
-
当 mid*mid > x 时,需要改变right,使right = mid-1
-
直到 left == right 结束,此时 left 就是 x 的算数平方根或者 x的算术平方根去掉整数之后的数
3.代码
public static int mySqrt(long x) {
if(x == 0){
return 0;
}
long left = 0;
long right = x;
while (left<right){
long mid = left+ (right-left+1)/2;
if((long)mid*(long)mid <= x){
left = mid;
}else{
right = mid-1;
}
}
return (int)left;
}
二分查找的查找左右边界方法可以参考以下文章