class Solution {
//我们找到一个数的平方根一定在1到本身的闭区间之内,我们可以直接在1到n的闭区间内遍历每一个数找到一个m的平方小于等于n,m+1的平方大于n的数
//为了优化这个方案,我们首先观察数据时递增排序的,可以使用二分法来降低时间复杂度
public int mySqrt(int x) {
//确定二分的其实位置
int left = 1;
int right = x;
//开始二分,注意left == right也是一个可能出现结果的地方
while(left <= right){
//确定二分位置
int mid = (left + right)/2;
//判断二分位置,如果mid平方大于n说明我们要找的平方根一定在左边,如果m的平方小于等于n可以分为以下几类,m+1的平方小于的等于n那就说明我们要找的平方根一定在右边
if(mid <= x/mid){
if((mid + 1) > x/(mid + 1)){
return mid;
}
left = mid + 1;
}else{
right = mid - 1;
}
}
return 0;
}
}
06-13
6448
08-06
130