概述
要求实现开方函数,面试时这个问题出现的次数还是比较多的。
一:二分查找法
对于一个给定的非负数A,它的平方根都不会大于[A/2+1],故在[0,A/2+1]的范围内进行二分查找
def sqrt(target):
low = 0
high = target // 2 + 1
while low <= high:
mid = (low + high) // 2
sq = mid * mid
if target == sq:
return mid
else:
if target > sq:
low = mid + 1
else:
high = mid - 1
二:牛顿迭代法
二分法,基本都能想到。面试官想要的都是牛顿迭代法的解答。
参照百度百科,此时求解方程
f
(
x
)
=
x
2
−
a
f(x)=x^2-a
f(x)=x2−a,开方即求
f
(
x
)
=
0
f(x)=0
f(x)=0,一阶泰勒展开:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x)=f(x_0) + f^{'}(x_0)(x-x_0)
f(x)=f(x0)+f′(x0)(x−x0)
令为0,可得更新公式:
x
=
1
2
(
x
0
+
a
x
0
)
x = frac{1}{2}(x_0+frac{a}{x_0})
x=21(x0+x0a)
def sqrt(target):
if target == 0:
return 0
last = 0
res = 1
while(abs(last-res)>=0.000001):
last = res
res = 1/2*(res+target/res)
return res
最后
以上就是淡淡路灯为你收集整理的LeetCode:开方函数sqrt两种实现的全部内容,希望文章能够帮你解决LeetCode:开方函数sqrt两种实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复