69.Sqrt(x)
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5
方法一:二分查找
由于 x平方根的整数部分是:满足 k*k ≤x 的最大 k 值,因此我们可以对 k进行二分查找,从而得到答案。
class Solution {
public int mySqrt(int x) {
int min=0;
int max=x;
if(x==1){
return 1;
}
while(max-min>1){
int mid=(max+min)/2;
if(x/mid<mid){ //用x/mid<mid而不是mid*mid>x防止溢出
max=mid;
}else{
min=mid;
}
}
return min;
时间复杂度:O(logx),即为二分查找需要的次数
空间复杂度:O(1)。
卡了很久:用x/mid<mid而不是mid*mid>x防止溢出