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 <= 10⁶ · At most 104 calls will be made to add, remove, and contains.
HashSet을 구현하라는 문제다.
크기가 10⁶으로 제한되므로 boolean array를 쓰면 편하다. boolean array의 크기를 10⁶+1 만큼 잡아두고 key를 index로 하여 add면 true, remove면 false로 설정한다.
contains는 key를 index로 한 boolean array 값을 그대로 리턴하면 된다.
class MyHashSet {
boolean[] flag;
public MyHashSet() {
flag = new boolean[1_000_001];
}
public void add(int key) {
flag[key] = true;
}
public void remove(int key) {
flag[key] = false;
}
public boolean contains(int key) {
return flag[key];
}
}
/**
* Your MyHashSet object will be instantiated and called as such:
* MyHashSet obj = new MyHashSet();
* obj.add(key);
* obj.remove(key);
* boolean param_3 = obj.contains(key);
*/