69。x的平方根题目来源:https://leetcode-cn.com/problems/sqrtx题目实现了intsqrt(intx)函数。计算并返回x的平方根,其中x是一个非负整数。由于返回类型是整数,结果中只保留整数部分,小数部分将被舍弃。示例1:输入:4输出:2示例2:输入:8输出:2解释:8的平方根为2.82842...,由于返回类型为整数,因此小数部分将被四舍五入。解题思路:二分查找Binarysearch,也叫二分查找,相信通过一个例子就能很好的理解这个概念。【猜数字】很多人可能都接触过这款游戏。这可以通过二分查找来实现。当被告知答案中的数字在一定范围内时,如何才能高效地猜出这个数字呢?那么二分查找法就来了,应该从这个范围的中间开始猜测。当告诉被猜数大于或小于答案数时,判断答案是落在被猜数的左边还是右边,再次确定范围后,从中间开始猜,如此循环,直到猜出答案数为止。题目中说明x是一个非负整数。从这个角度看,平方根一定不能超过自己。同样,一个数的平方根与一个数的一半相比,一个数的平方根也不会超过一个数的一半。如果你看不懂上一段的后半部分,你可以试着在纸上画一个二次方的函数图像。绘制曲线中的点,x轴对应的值,其实就是y对应的值的平方根。当y值较大时,上段的结论更为明显。(注:题中要求的数为非负整数,即y的值。)则有如下不等式:$$\left(\frac{x}{2}\right)^2\geqx$$解决上面的不等式,可以得到$x\leq0$或$x\geq4$。这里,如果这个数的一半的平方大于它自己,那么这个数的取值范围。可以看出边界值为4,所以分别计算0、1、2、3。由于题目要求返回整数,小数部分会四舍五入,所以对应的平方根依次为0、1、1、1。具体代码如下。代码实现类解决方案:defmySqrt(self,x:int)->int:#注意边界0,1left=0right=x//2+1#根据上面的公式计算#开始二分查找whileleft
