Try   HackMD

705.Design HashSet

tags: Easy,Design,Array,Hash Table,Linked List

705. Design HashSet

題目描述

Design a HashSet without using any built-in hash table libraries.

Implement MyHashSet class:

  • void add(key) Inserts the value key into the HashSet.
  • bool contains(key) Returns whether the value key exists in the HashSet or not.
  • void remove(key) Removes the value key in the HashSet. If key does not exist in the HashSet, do nothing.

範例

Example 1:

Input
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
Output
[null, null, null, true, false, null, true, null, false]

Explanation
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);      // set = [1]
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(1); // return True
myHashSet.contains(3); // return False, (not found)
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(2); // return True
myHashSet.remove(2);   // set = [1]
myHashSet.contains(2); // return False, (already removed)

Constraints:

  • 0 <= key <= 106
  • At most 104 calls will be made to add, remove, and contains.

解答

C#

public class MyHashSet { const int Size = 1 << 10; const int Mask = Size - 1; List<int>[] set = new List<int>[Size]; public MyHashSet() { } private List<int> this[int key] => set[key & Mask] ??= new List<int>(); public void Add(int key) { var slot = this[key]; if (!slot.Contains(key)) { slot.Add(key); } } public void Remove(int key) { var slot = this[key]; if (slot.Contains(key)) { slot.Remove(key); } } public bool Contains(int key) => this[key].Contains(key); }

JimMay 30, 2023

Python

class MyHashSet: def __init__(self): self.hashset = set() def add(self, key: int) -> None: self.hashset.add(key) def remove(self, key: int) -> None: if self.contains(key): self.hashset.remove(key) def contains(self, key: int) -> bool: return key in self.hashset

Ron ChenTue, May 30, 2023

Reference

回到題目列表