力扣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++ 二分解法的主要内容,如果未能解决你的问题,请参考以下文章

精选力扣500题 第31题 LeetCode 69. x 的平方根c++ / java 详细题解

力扣69. x 的平方根

leetcode69 X的平方根的几种解法

69.x的平方根 ---二分查找

LeetCode69. x 的平方根

leetcode - 二分查找