题目描述
给你一个非负整数 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 { |