假设我们有一个称为nums的数字列表,我们想从中选择两对数字,以使这两对数字之和之间的绝对差最小。
因此,如果输入类似于nums = [3,4,5,10,7],则输出将为1,因为我们可以选择这些对(3 + 7)-(4 + 5)= 1。
为了解决这个问题,我们将按照以下步骤操作:
距离:=一个新列表
对于范围从0到nums的i-2,执行
[dist,i1,i2]:=距离[i]
j:= i + 1
[dist2,i3,i4]:=距离[j]
j <(i1,i2,i3,i4)中距离和元素的大小不是唯一的,
如果(i1,i2,i3,i4)中的元素是唯一的,则
返回ans
[dist2,i3,i4]:=距离[j]
j:= j + 1
ans:= ans和(dist2-dist)的最小值
插入列表[| nums [i]-nums [j] | ,i,j]在距离的尽头
对于范围i + 1到nums-1的j
排序列表距离
回答:= 1 ^ 9
对于范围在0到距离大小-2的i
让我们看下面的实现以更好地理解:
class Solution: def solve(self, nums): distances = [] for i in range(len(nums) - 1): for j in range(i + 1, len(nums)): distances.append((abs(nums[i] - nums[j]), i, j)) distances.sort() ans = 1e9 for i in range(len(distances) - 1): dist, i1, i2 = distances[i] j = i + 1 dist2, i3, i4 = distances[j] while j < len(distances) and len({i1, i2, i3, i4}) != 4: dist2, i3, i4 = distances[j] j += 1 if len({i1, i2, i3, i4}) == 4: ans = min(ans, dist2 - dist) return ans ob = Solution()nums = [3, 4, 5, 10, 7] print(ob.solve(nums))
[3, 4, 5, 10, 7]
输出结果
1