程序找到两对数字,其中这对数字之和之和在python中最小
假设我们有一个称为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