[Lc]69x的平方根
Contents
题目
题解
1. 二分查找法
- 时间复杂度$o(log{N})$
- 空间复杂度$O(1)$
class Solution {
public:
int mySqrt(int x) {//两个方法。1、二分查找法
if (x <= 1) return x;//0和1直接返回
int left = 0, right = x;//这里直接用x就行,每次是取一半,用x问题不大
while (left <= right) {
int mid = left + (right - left) / 2;
if (x / mid >= mid) left = mid + 1;//注意1:使用x/mid >= mid来判断,而不是mid*mid >= mid
else right = mid;//注意2:left是mid+1,right是mid
}
return right - 1;//注意3:返回right-1
}
};
2. 牛顿迭代法
- 时间复杂度$o(log{N})$
- 空间复杂度$O(1)$ 牛顿法的主要递推公式是$x_{n+1} = x_{n}-\frac{f(x_{n})}{f^{'}(x_{n})}$,递推到和0差的值很小即可停止。
class Solution {
public:
int mySqrt(int x) {//两个方法。2、牛顿迭代法
if(x<=1) return x;
double res = x/2;//随机取一个数作为第一个数,取x/2
while(abs(res*res-x) > 1e-6){//定义一个阈值,小于阈值停止迭代
res = (res + x/res)/2;//这个参考牛顿法公式
}
return res;
}
};
Author ChrisHRZ
LastMod 2020-04-11