题目:
实现
int sqrt(int x)
函数。计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4 输出: 2示例 2:
输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
暴力for循环和调用系统方法的我就不说了,怕被人骂
这个是看的别人的然后靠自己的理解看懂。就是二分查找
二分查找算法的前置条件是,一个已经排序好的序列,这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止。
public static int mySqrt(int x) {
if (x == 0 || x == 1)
return x;
long left = 1;
long right = x;
while (left <= right) {
long mid = (right + left) / 2;
if (mid * mid == x)
return (int) mid;
if (mid * mid < x)
left = (int)mid + 1;
if (mid * mid > x)
right = (int)mid - 1;
}
if (right * right < x) {
return (int) right;
} else {
return (int) left;
}
}