Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题是一道求整数的平方根
- 要求不能使用现有的数学方法
二、思路分析:
我们拿到本题,心里泛起嘀咕。九年义务教育白学了,又是眼会手不会的题。
难归难,我们也要迎头赶上,卷起来。
如何求平方根,首先在网上查找相关资料,常用的方法:牛顿迭代法。
牛顿迭代法是一种快速求出实数域或复数域的近似值。
公式推理:
- f(x) = x^2-C
- 当f(x)等于零时,x^2-C=0,得到一个正实根
- f(x)的导数2x
- x−f(x)/(2x) 就是一个比 x 更接近的近似值
- 则f(x)代入计算,得到x−(x2−a)/(2x),即(x+a/x)/2
根据推导出的公式,我们使用Python实现代码如下:
class Solution:
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if x <= 1:
return x
r = x
while r > x / r:
r = (r + x / r) // 2
return int(r)
三、总结:
我们提交代码,AC记录如下:
时间复杂度:O(logn),空间复杂度:O(1)
本题,我们使用最容易的牛顿迭代法去解决的。在官网的解析中,还可以使用二分法和数学方法解决。
以上是本期内容,欢迎大佬们点赞评论,下期见~~~