【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)

04-27 2630阅读 0评论
  • 作者主页: 🔗进朱者赤的博客

  • 精选专栏:🔗经典算法

  • 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名)

  • ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的关注,持续更新🤞

    ————————————————-

    x 的平方根

    • 标签(题目类型):数学、二分查找

      题目描述

      实现 int sqrt(int x) 函数。

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

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

      示例 1:

      输入: 4
      输出: 2
      

      示例 2:

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

      原题:LeetCode 69. x 的平方根

      思路及实现

      方式一:二分查找

      思路

      由于平方根函数的性质,我们知道平方根一定位于0和x之间(x为非负整数)。因此,我们可以使用二分查找算法在0到x之间查找平方根。在每次迭代中,我们计算中间值mid的平方,如果它等于x,则mid就是平方根;如果它小于x,则平方根一定在mid的右侧;如果它大于x,则平方根一定在mid的左侧。通过不断缩小查找范围,最终我们可以找到平方根。

      代码实现

      Java版本
      public class Solution {
          public int mySqrt(int x) {
              if (x  int:
              if x == 0: return 0
              last = 0.0
              curr = x
              epsilon = 0.00001
              while abs(curr - last) > epsilon:
                  last = curr
                  curr = (curr + x / curr) / 2
              return int(curr)
      

      说明:

      • Python版本同样使用了牛顿迭代法。
      • 使用了abs函数来计算浮点数之间的绝对值。
        Golang版本
        package main
        import (
        	"math"
        )
        func mySqrt(x int) int {
        	if x == 0 {
        		return 0
        	}
        	last := 0.0
        	curr := float64(x)
        	epsilon := 0.00001
        	for math.Abs(curr-last) > epsilon {
        		last = curr
        		curr = (curr + float64(x)/curr) / 2
        	}
        	return int(curr)
        }
        func main() {
        	// 测试代码
        	x := 8
        	result := mySqrt(x)
        	println(result) // 输出应为 2
        }
        

        说明:

        • Golang版本使用了牛顿迭代法来计算平方根。
        • epsilon定义了收敛的阈值,当连续两次迭代结果的差值小于这个阈值时,认为找到了足够精确的解。
        • math.Abs函数用于计算浮点数之间的绝对值。

          复杂度分析

          • 时间复杂度:与选择的阈值epsilon有关,但通常很快收敛,所以时间复杂度相对较低。
          • 空间复杂度:O(1),只使用了常数级别的额外空间。

            总结

            方法优点缺点时间复杂度空间复杂度其他
            二分查找思路简单,直观易懂可能不是最优解,对于非整数平方根需要额外处理O(log x)O(1)适用于整数平方根计算
            牛顿迭代收敛速度快,通常很快能得到近似解需要选择合适的初始值和阈值近似O(1)O(1)适用于需要高精度或浮点数平方根计算

            相似题目

            相似题目难度链接
            平方根的四舍五入中等力扣-6905
            求一个数的立方根中等力扣-69
            计算整数除法简单力扣-7
            计算平方和简单力扣-665
            最近的平方数简单力扣-676

            这些题目都涉及到数学运算和数值计算,与平方根计算有一定的相似性,可以用于加深对数值计算和相关算法的理解。请注意,这里提供的链接是基于假设的,实际链接需要根据具体的在线编程平台(如力扣)进行查找。

            欢迎一键三连(关注+点赞+收藏),技术的路上一起加油!!!代码改变世界

            • 关于我:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名),回复暗号,更能获取学习秘籍和书籍等

            • —⬇️欢迎关注下面的公众号:进朱者赤,认识不一样的技术人。⬇️—


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,2630人围观)

还没有评论,来说两句吧...

目录[+]