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
- đối với j trong phạm vi i + 1 đến kích thước của nums - 1, thực hiện
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