题目链接:力扣
解题思路:二分查找, 从1到x进行二分找到一个最大的k是的K^2<x,因为k*k可能发生溢出,可以将使用long类型,或者通过(k*k)/k==k来快速判断是否发生了溢出,如果发生了溢出,则(k*k)/k!=k。
AC代码
class Solution {
public static int mySqrt(int x) {
int left = 1;
int right = x;
int result =0;
while (left <= right) {
int mid = (right-left)/2+left;
int square = mid*mid;
if (square/mid==mid&&mid*mid<=x){
result =mid;
left = mid+1;
}else {
right=mid-1;
}
}
return result;
}
}