Like the HashMap, we use separate chaining with a prime number of buckets to minimize collisions.
__init__:self.size = 769,self.buckets = [[] for _ in range(self.size)]._hash(key):key % self.size.add(key):- Check if
keyis inself.buckets[idx]. - If not, append it.
- Check if
contains(key):- Return
Trueifkeyis inself.buckets[idx].
- Return
remove(key):- If
keyis inself.buckets[idx],removeit.
- If
- Time Complexity: O(N / K).
- Space Complexity: O(N + K).
class MyHashSet:
def __init__(self):
self.size = 769
self.buckets = [[] for _ in range(self.size)]
def _hash(self, key):
return key % self.size
def add(self, key: int) -> None:
idx = self._hash(key)
if key not in self.buckets[idx]:
self.buckets[idx].append(key)
def contains(self, key: int) -> bool:
idx = self._hash(key)
return key in self.buckets[idx]
def remove(self, key: int) -> None:
idx = self._hash(key)
if key in self.buckets[idx]:
self.buckets[idx].remove(key)