【LeetCode简单题】-- 69. x 的平方根

声明

今天是LeetCode 简单第 道题,以此作为练习记录,欢迎交流。文中也会给出所参考的文章链接,感谢前辈们的总结。
(手动比心ღ( ´・ᴗ・` ))

题目

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2
示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。

正文

思路1:
二分法查找,具体怎么实现?

当 x≥2 时,它的整数平方根一定小于 x/2 且大于 0,即 0 < a

class Solution:
    def mySqrt(self, x: int) -> int:
        # x 是是否 < 2
        if x < 2:
            return x

        # 确定初始查找范围
        left, right = 0, x / 2
        while left < right:
            mid = left + (right - left) // 2
            target = mid ** 2
            if target > x:
                # left = mid + 1
                right = mid - 1
            else:
                # right = mid
                left = mid + 1

        # return left
        return int(left)

当测试用例为8时,错误。

注意问题

  1. x/2 or x//2
  2. left ,right 怎么选择? 也是使用二分法的三个重要问题。
  3. left < right or left <= right :
  4. 最后返回 left or right

对于问题 3,4,参考
二分法两个重要点(< or <= ;返回)

LeetCode解答

class Solution:
    def mySqrt(self, x):
        if x < 2:
            return x
        
        left, right = 2, x // 2
        
        while left <= right:
            pivot = left + (right - left) // 2
            num = pivot * pivot
            if num > x:
                right = pivot -1
            elif num < x:
                left = pivot + 1
            else:
                return pivot
            
        return right
  1. x < 2 返回 x 。 不对啊。(注意题意 x 是非负整数)
  2. 为什么从 2 开始搜索?

思路2: 牛顿法

【LeetCode简单题】-- 69. x 的平方根_第1张图片

总结

1、总结二分法查找框架

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

你可能感兴趣的:(LeetCode简单题,leetcode,x,的平方根)