力扣69.x的平方根 C++ 二分解法
Posted weixin_43739821
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣69.x的平方根 C++ 二分解法相关的知识,希望对你有一定的参考价值。
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
int mySqrt(int x) {
if (x == 1||x==0) return x;
int low = 1, high = x - 1;
int m=0;
while (low <= high) {
int mid = (low + high) / 2;
/*
if (mid > 46341) {//可有可无,可加快算法速度
high = 46341;//因为int型的范围限制,平方根不会超过46340
continue;
}
*/
long long chen = (long long)mid * (long long )mid;
if (chen == x) { //mid*mid越界怎么办?用long long
m = mid;//此时找到了该数
break;
}
else if (chen > x) high = mid-1;
else low = mid+1;
}
if (m != 0) return m;
long long x1 = (long long)low * (long long)low, x2 = (long long)high * (long long)high;
if (x1 < x && x2 < x) return (low > high) ? low : high;
else return(x1 < x) ? low : high;
//返回这部分应该还可以优化
}
主要思想就是遍历所有整数,因为整数有序所以想到了二分法,其他方法包括袖珍计算器算法、牛顿迭代等非主流方法。
以上是关于力扣69.x的平方根 C++ 二分解法的主要内容,如果未能解决你的问题,请参考以下文章