
1、导入模块在Python中,需要处理与数学相关的 *** 作,就要使用math模块,里面包含了一些运算的函数,使用之前需要进行导入,方法如下:importmath2、创建类,得到一个点classPoint:def__init__(self,a=0,b=0):self.a=aself.b=bdefgetA(self):returnself.adefgetB(self):returnself.b在这段代码中,首先创建了一个类为Point,并且对它进行了初始化,初始化的为a,b的坐标,再分别使用getA、getB的方法去获得一个实例a坐标以及b坐标。3、计算两个点的距离在上面创建了一个类,表示的是a和b轴的坐标,接下来要初始化两个点,并且对这两个点之间的距离进行计算,两个点为p1,p2,然后通过刚才导入的Python中自带的math模块,去对这两个数进行开平方根,最后得到的就是两个点之间的距离了,代码如下classLine:def__init__(self,p1,p2):self.a=p1.getA()-p2.getA()self.b=p1.getB()-p2.getB()self.len=math.sqrt(self.a*self.a+self.b*self.b)#得到两个点之间的距离defgetlen(self):returnself.lenp1=Point(1,2)p2=Point(4,6)lineLen=Line(p1,p2)print(lineLen.getlen())。
题目:给定一个数组,数组中含有重复元素,给定两个数组num1和num2,求这两个数字在数组中出现的最小距离。
分析:动态规划法。动态规划的方法可以把每次遍历的结果都记录下来从而减少遍历次数。当遍历数组时,会遇到以下两种情况:
(1)当遇到num1时,记录下num1值对应的数组下标的位置lastPos1,通过求lastPos1与上次遍历到num2下标位置的值lastPos2的差可以求出最近一次遍历到num1与num2的距离。
(2)当遇到num2时,记录下num2值对应的数组下标的位置lastPos2,通过求lastPos1与上次遍历到num2下标位置的值lastPos2的差可以求出最近一次遍历到num1与num2的距离。
code:
def minDis(arr, num1, num2):
if arr is None or len(arr) <= 0:
return 2 ** 32
lastPos1 = -1
lastPos2 = -1
minDis = 2 ** 32
i = 0
while i <len(arr):
if arr[i] == num1:
lastPos1 = i
if lastPos2 >= 0:
minDis = min(minDis, abs(lastPos2 - lastPos1))
if arr[i] == num2:
lastPos2 = i
if lastPos1 >= 0:
minDis = min(minDis, abs(lastPos2 - lastPos1))
i += 1
return minDis
if __name__ == "__main__":
arr = [4, 5, 6, 4, 7, 4, 6, 4, 7, 8, 5, 6, 4, 3, 10, 8]
num1 = 4
num2 = 8
print(minDis(arr, num1, num2))
程序运行结果为:
2
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)