在python中找到两对数字,使得这两对数字之和的绝对差最小

在python中找到两对数字,使得这两对数字之和的绝对差最小

假设我们有一个数字列表称为nums,我们想要从中选择两对数字,使得这两个数字对之和的绝对差最小。

因此,如果输入为nums = [3, 4, 5, 10, 7],则输出将为1,因为我们可以选择这些对(3 + 7) -(4 + 5)= 1。

为了解决这个问题,我们将遵循以下步骤:

  • 距离:=新列表
  • for i in range 0 to size of nums – 2, do
    • for j in range i + 1 to size of nums – 1, do
      • 在距离列表的末尾插入列表 [|nums[i] – nums[j]| , i, j]
    • 对距离列表进行排序
    • ans:= 1^9
    • for i in range 0 to size of distances – 2, do
      • [dist, i1, i2] := distances[i]
      • j := i + 1
      • [dist2, i3, i4] := distances[j]
      • while j < size of distances and elements in (i1, i2, i3, i4) are not unique, do
      • [dist2, i3, i4] := distances[j]
      • j := j + 1
      • 如果(i1, i2, i3, i4)中的元素是唯一的,则
      • ans:= ans和(dist2 – dist)的最小值
      • return ans

让我们看一下以下实现,以获得更好的理解:

示例代码

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程