Triển khai cấu trúc dữ liệu Set với các phương thức:
- Constructor: khởi tạo set rỗng
add(val): thêm số nguyênvalexists(val): kiểm tracó trong set khôngremove(val): xóavalkhỏi set
Ví dụ: add(10), add(20), add(10), exists(10)→True, remove(10), exists(10)→False, exists(20)→True.
Giải thuật (Dictionary ánh xạ giá trị → list)
buckets: defaultdict(list), key là giá trị, value là list chứa giá trị (để kiểm tra tồn tại O(1))add(val): nếu chưa tồn tại → append vàobuckets[val]exists(val): trả vềremove(val): xóabuckets[val]
Ví dụ triển khai
from collections import defaultdict
class MySet:
def __init__(self):
self.buckets = defaultdict(list)
def add(self, val):
if not self.exists(val):
self.buckets[val].append(val)
def exists(self, val):
return val in self.buckets[val]
def remove(self, val):
del self.buckets[val]
s = MySet()
s.add(10)
s.add(20)
s.add(10)
print(s.exists(10))
s.remove(10)
print(s.exists(10))
print(s.exists(20))
Đầu vào
s = MySet(); s.add(10); s.add(20); s.add(10); s.exists(10); s.remove(10); s.exists(10); s.exists(20)
Đầu ra
True False True