Sqrt(x)
public int sqrt(int x) {
if (x < 0) throw new IllegalArgumentException();
else if (x <= 1) return x;
int start = 1, end = x;
// 直接对答案可能存在的区间进行二分 => 二分答案
while (start + 1 < end) {
int mid = start + (end - start) / 2;
// writing in this way instead of "nums[mid] * nums[mid]" to avoid overflow
if (mid == x / mid) return mid;
// possible root must be larger than or equal to current mid
else if (mid < x / mid) start = mid;
// possible root must be smaller than or equal to current mid
else end = mid;
}
if (end > x / end) return start;
return end;
}public double sqrt(double x) {
double res = 1.0;
double eps = 1e-12;
while (Math.abs(res * res - x) > eps) {
res = (res + x / res) / 2;
}
return res;
}Last updated