题目描述
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
输入输出
1 | 输入:x = 4 |
基本思路
二分查找的思路 但是有两个要注意的点
int mid = left + (right - left + 1) / 2;
当
[left, right]
区间里边只剩下两个数的时候 如果满足mid < x / mid
下一次又会死循环到left = mid
又走一遍代码left
和right
值没有变化return left;
由于边界搜索是
left = mid
与right = mid - 1
,因此退出循环的时候一定有left
与right
重合,返回right
也可以。
java实现
1 | class Solution { |