Cho danh sách contacts, mỗi phần tử là danh sách email của một liên lạc. Hai liên lạc được coi là cùng một người nếu chia sẻ ít nhất một email. Đếm số người duy nhất.
Ví dụ: contacts=[["alex@gmail.com","alex@yahoo.com"],["alex_25@yahoo.com","alex@gmail.com"],["bob15@gmail.com"]] → 2 (hai liên lạc đầu trùng email alex@gmail.com).
Giải thuật (Hash set theo dõi email đã thấy)
- Duyệt từng liên lạc
ctrongcontacts - Kiểm tra các email trong
c:- Nếu email chưa thấy → thêm vào set
found - Nếu email đã thấy → đánh dấu
duplicate = True
- Nếu email chưa thấy → thêm vào set
- Nếu không trùng lặp (
duplicate == False) → tăng đếm người duy nhất
Ví dụ triển khai
def solve(contacts):
ans = 0
found = set()
for c in contacts:
duplicate = False
for email in c:
if email not in found:
found.add(email)
else:
duplicate = True
if not duplicate:
ans += 1
return ans
contacts = [
["alex@gmail.com", "alex@yahoo.com"],
["alex_25@yahoo.com", "alex@gmail.com"],
["bob15@gmail.com"]
]
print(solve(contacts))
Đầu vào
[["alex@gmail.com","alex@yahoo.com"],["alex_25@yahoo.com","alex@gmail.com"],["bob15@gmail.com"]]
Đầu ra
2