题解 | 求平方根
求平方根
https://www.nowcoder.com/practice/09fbfb16140b40499951f55113f2166c
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param x int整型
* @return int整型
*/
public int mysqrt (int x) {
// x^2 >= 4x在 x >= 4时明显成立
return binarySearch(x/2,x);
}
public int binarySearch(int arri, int t) {
// arr 从 1到 arri
int l = 1, r = arri;
int closest = -1;
boolean found = false;
if (t == 0) return 0;
else if (t < 4) return 1;
while (l <= r) {
int mid = l + ((r - l) >> 1);//向下取整
if ((long) mid * mid == t) {
found = true;
closest = mid;
r = mid - 1;
} else if ((long) mid * mid < t) {
if(!found)
closest = mid;// 没找到才记录
l = mid + 1;
} else {
r = mid - 1;
}
}
// 如果找到x,返回左边界;否则返回比目标值小的最近的更小值,如果没有则返回-1
return closest;
}
}
智元机器人成长空间 174人发布