Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm hai cặp số trong đó sự khác biệt giữa tổng của các cặp này được giảm thiểu trong python

Giả sử chúng ta có một danh sách các số được gọi là num và chúng ta muốn chọn hai cặp số từ đó sao cho chênh lệch tuyệt đối giữa tổng của hai cặp này là nhỏ nhất.

Vì vậy, nếu đầu vào là nums =[3, 4, 5, 10, 7], thì đầu ra sẽ là 1, vì chúng ta có thể chọn các cặp này (3 + 7) - (4 + 5) =1.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:

  • khoảng cách:=một danh sách mới
  • đối với tôi trong phạm vi từ 0 đến kích thước là nums - 2, thực hiện
    • đối với j trong phạm vi i + 1 đến kích thước của nums - 1, thực hiện
      • chèn một danh sách [| nums [i] - nums [j] | , i, j] ở cuối khoảng cách
    • sắp xếp khoảng cách danh sách
    • ans:=1 ^ 9
    • đối với tôi trong phạm vi từ 0 đến kích thước của khoảng cách - 2, thực hiện
      • [dist, i1, i2]:=distance [i]
      • j:=i + 1
      • [dist2, i3, i4]:=distance [j]
      • trong khi j
      • [dist2, i3, i4]:=distance [j]
      • j:=j + 1
    • nếu các phần tử trong (i1, i2, i3, i4) là duy nhất, thì
      • ans:=tối thiểu ans và (dist2 - dist)
    • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

Mã mẫu

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))

Đầu vào

[3, 4, 5, 10, 7]

Đầu ra

1