题目解析
69. x 的平方根
这道题表面是没有顺序性,但是我们可以发现如果使用枚举策略,它是包含顺序性质的,因此我们将枚举算法改进成二分算法
算法讲解
我们让left指针指向1, right指针指向x
如果当前的mid计算出来的平方 > x,right = mid - 1;
else left = mid;
这里需要注意的一点是,我们这里的mid计算需要使用left + (right - left + 1) / 2
class Solution {
public:
int mySqrt(int x) {
//这道题没有直接的顺序性,但是我们可以寻找顺序性
if(x == 0)return 0;
int left = 1, right = x;
while(left < right)
{
long long mid = left + (right - left + 1) / 2;
long long num = pow(mid, 2);
if(num > x)right = mid - 1;
else left = mid;
}
return left;
}
};