二、x的平方根
本题给出我们一个数字x,要求我们返回这个数的算术平方根,结果只保留整数部分,不得使用语言内置的求平方根的方法,本题也是对于二分法的一种扩展。
1.二分法
我们可以使用二分查找的思想,用两个边界值不断地去逼近要得到的那个值,具体代码如下:
class Solution {
public int mySqrt(int x) {
int left = 0;
int right = x / 2 + 1;
long mid = (left + right) / 2;
while(left <= right) {
mid = (left + right) / 2;
if(mid * mid < x) {
left = (int)mid + 1;
} else if(mid * mid > x) {
right = (int)mid - 1;
} else {
return (int)mid;
}
}
return right;
}
}
复杂度分析
- 时间复杂度:O(logn)。
- 空间复杂度:O(1)。