leetcode69:x的平方根

leetcode:69题 x的平方根

题目描述:

实现 int sqrt(int x) 函数。

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

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

示例 1:

1
2
输入: 4
输出: 2

示例 2:

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

作者:liweiwei1419
链接:https://leetcode-cn.com/problems/sqrtx/solution/er-fen-cha-zhao-niu-dun-fa-python-dai-ma-by-liw

解题思路:

一、二分法

思路分析:

二分查找法应用于搜索平方根的思想很简单,其实就是“猜”,但是是有策略的“猜”,用“排除法”在有限的区间里,一次排除一半的区间元素,最后只剩下一个数,这个数就是题目要求的向下取整的平方根整数。

一个数的平方根肯定不会超过它自身,不过直觉还告诉我们,一个数的平方根最多不会超过它的一般。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def mySqrt(self, x: int) -> int:
if x == 0:
return 0
left = 1
right = x//2
while left<right:
mid = (left + right+1)>>1
if (mid * mid) > x:
right = mid - 1
else:
left = mid
return left

二、牛顿法

使用牛顿法可以得到一个正实数的算术平方根,因为题目中说“结果只保留整数部分”,因此,我们把使用牛顿法得到的浮点数转换为整数即可。

这里给出牛顿法的思想:

在迭代过程中,以直线代替曲线,用一阶泰勒展式(即在当前点的切线)代替原曲线,求直线与 xx 轴的交点,重复这个过程直到收敛。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:

def mySqrt(self, x):
if x < 0:
raise Exception('不能输入负数')
if x == 0:
return 0
# 起始的时候在 1 ,这可以比较随意设置
cur = 1
while True:
pre = cur
cur = (cur + x / cur) / 2
if abs(cur - pre) < 1e-6:
return int(cur)

python-opencv实现logo缺陷检测

本文介绍了如何使用python-opencv来实现检测企业的logo,并返回有效的参数信息。文中涉及到了很多关于遇到问题之后解决方案的思考并寻找相应的对策,一步一步的逼近我们想要的结果,看完之后希望能对大家在解决问题方面有思路上的帮助~

深度学习用于异常检测

这项调查的目的有两个方面,首先,我们对深度异常检测(deep anomaly detection,DAD)的研究方法进行结构化和全面的综述。此外,我们还将讨论在各种应用领域中采用DAD方法并评估其有效性。

|