题目标题
求三个升序数组a[l],b[m],c[n]中,每个数组出一个数,要求max(|a[i]-b[j]|,|a[i]-c[k]|,|b[j]-c[k]|)最小。
参考解析
def mins(a,b,c):
mins = a if a < b else b
mins = mins if mins < c else c
return mins
def maxs(a,b,c):
maxs = b if a < b else a
maxs = c if maxs < c else maxs
return maxs
def minDistance(a,b,c):
aLen = len(a)
bLen = len(b)
cLen = len(c)
curDist = 0
minsd = 0
minDist = 2 ** 32
i = 0 #数组a的下标
j = 0 #数组b的下标
k = 0 #数组c的下标
while True:
curDist = maxs(abs(a[i]-b[j]),abs(a[i]-c[k]),abs(b[j]-c[k]))
if curDist < minDist:
minDist = curDist
#找出当前遍历到三个数组中最小值
minsd = mins(a[i],b[j],c[k])
if minsd == a[i]:
i += 1
if i >= aLen:
break
elif minsd == b[j]:
j += 1
if j >= bLen:
break
else:
k += 1
if k >= cLen:
break
return minDist
if __name__ == "__main__":
a = [3,4,5,7,15]
b = [10,12,14,16,17]
c = [20,21,23,24,37,30]
print("最小距离为:"+str(minDistance(a,b,c)))
推荐习题
二叉搜索树中删除指定节点 给定数组{a1, a2, a3, ... an},要求挑出一些数,这些数不能相邻,使得加起来的和最大。 字符串翻转 有一个木棍长度为n个单位,上面有若干只蚂蚁。蚂蚁只能沿着它朝左或者朝右走。速度为1个每秒一个单位。如果两只走的方向不同的蚂蚁相遇,则它们都会调头,朝相反方向以同样的速度继续走。给定所有蚂蚁的位置,求最后一只蚂蚁掉下棍子的时间。 数据范围:木棍长度n :正整数 1 <= n <= 10000 每只蚂蚁的位置和走的方向,两个非负整数数组left[], right[] 每个数组长度为[0, n + 1]之间的整数。两个数组长度总和是[1, n + 1]之间的整数,在两个数组里,没有整数重复出现。(位置表示是非负整数[0..n]之间。的同一个位置不会有两只蚂蚁。总体上,至少存在一只蚂蚁。) 例如 输入:n = 4, left = {4,3}, right = {0,1}, 答案是4……自己分析下就好。  如何在O(1)时间删除链表节点 二叉树的最近公共父亲节点 在从1到n的正数中1出现的次数----输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。 例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次 Python中列表,元组的相同之处及区别都有哪些?集合与字典呢?