Design HashSet

easy design hash table

Problem

Implement add, remove, contains for ints.

Inputadd(1); add(2); contains(1); contains(3); remove(2); contains(2)
OutputTrue False False
Standard hash set ops.

class MyHashSet:
    def __init__(self): self.k = 769; self.buckets = [[] for _ in range(self.k)]
    def _h(self, x): return x % self.k
    def add(self, x):
        b = self.buckets[self._h(x)]
        if x not in b: b.append(x)
    def remove(self, x):
        b = self.buckets[self._h(x)]
        if x in b: b.remove(x)
    def contains(self, x): return x in self.buckets[self._h(x)]
class MyHashSet {
  constructor() { this.k = 769; this.b = Array.from({length: 769}, () => []); }
  h(x) { return x % this.k; }
  add(x) { const b = this.b[this.h(x)]; if (!b.includes(x)) b.push(x); }
  remove(x) { const b = this.b[this.h(x)]; const i = b.indexOf(x); if (i >= 0) b.splice(i, 1); }
  contains(x) { return this.b[this.h(x)].includes(x); }
}
class MyHashSet {
    int k = 769; List> b;
    public MyHashSet() { b = new ArrayList<>(); for (int i = 0; i < k; i++) b.add(new ArrayList<>()); }
    int h(int x) { return x % k; }
    public void add(int x) { List l = b.get(h(x)); if (!l.contains(x)) l.add(x); }
    public void remove(int x) { b.get(h(x)).remove((Integer) x); }
    public boolean contains(int x) { return b.get(h(x)).contains(x); }
}
class MyHashSet {
    int k = 769; vector> b;
public:
    MyHashSet() : b(k) {}
    int h(int x) { return x % k; }
    void add(int x) { auto& l = b[h(x)]; if (find(l.begin(), l.end(), x) == l.end()) l.push_back(x); }
    void remove(int x) { auto& l = b[h(x)]; l.erase(std::remove(l.begin(), l.end(), x), l.end()); }
    bool contains(int x) { auto& l = b[h(x)]; return find(l.begin(), l.end(), x) != l.end(); }
};
Time: O(n/k) avg Space: O(n + k)