Cho hai danh sách L1 và L2, tìm hiệu nhỏ nhất (giá trị tuyệt đối) giữa một số từ L1 và một số từ L2.
Ví dụ: L1 = [2, 7, 4], L2 = [16, 10, 11] → 3 (10 - 7 = 3).
Quy trình giải quyết (Two Pointers)
- Sắp xếp cả hai danh sách.
- Khởi tạo
ans = infinity,i = j = 0. - Trong khi
i < len(L1)vàj < len(L2):- Cập nhật
ans = min(ans, abs(L1[i] - L2[j])). - Nếu
L1[i] < L2[j], tăngi, ngược lại tăngj.
- Cập nhật
- Trả về
ans.
Ví dụ mã nguồn
class Solution:
def solve(self, L1, L2):
L1.sort()
L2.sort()
ans = float("inf")
i = j = 0
while i < len(L1) and j < len(L2):
ans = min(ans, abs(L1[i] - L2[j]))
if L1[i] < L2[j]:
i += 1
else:
j += 1
return ans
ob = Solution()
L1 = [2, 7, 4]
L2 = [16, 10, 11]
print(ob.solve(L1, L2)) # Output: 3
Đầu vào
[2, 7, 4], [16, 10, 11]
Đầu ra
3