感觉two pointer可以,写了个例子- a = [1,2,3,4]
- b = [5,6,7,8]
- c = [2,1,4,8]
- def minDiff(a,b,c):
- mindiff = float('inf')
- currdiff = float('inf')
- num = [[x, 1] for x in a] + [[x, 2] for x in b] + [[x, 3] for x in c]
- num.sort(key = lambda x: x[0])
-
- l = 0
- r = 0
- res = []
- groups = {}
-
- for r in range(len(num)):
- if num[r][1] in groups:
- groups[num[r][1]] += 1
- else:
- groups[num[r][1]] = 1
-
- while set(groups.keys()) == {1,2,3}:
- currdiff = num[r][0] - num[l][0]
- if currdiff < mindiff:
- mindiff = currdiff
- res = [num[l][0], num[l + 1][0], num[r][0]]
-
- groups[num[l][1]] -= 1
- if groups[num[l][1]] == 0:
- groups.pop(num[l][1])
- l += 1
-
- return res
- print(minDiff(a,b,c))
复制代码 |