705. Design HashSet
Problem
Tags: Array
, Hash Table
, Linked List
, Design
, Hash Function
Design a HashSet without using any built-in hash table libraries.
Implement MyHashSet
class:
void add(key)
Inserts the valuekey
into the HashSet.bool contains(key)
Returns whether the valuekey
exists in the HashSet or not.void remove(key)
Removes the valuekey
in the HashSet. Ifkey
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^6
- At most
10^4
calls will be made toadd
,remove
, andcontains
.
Code
C
// 705. Design HashSet (1/9/54183)
// Runtime: 96 ms (85.58%) Memory: 25.04 MB (94.80%)
// Macros and functions in sys/mman.h
extern void* mmap(void* addr, size_t len, int prot, int flags, int fd, off_t offset);
extern int munmap(void* addr, size_t len);
#define SIZE 1000001ULL
typedef struct {
bool key[SIZE];
} MyHashSet;
MyHashSet* myHashSetCreate() {
return mmap(NULL, sizeof(MyHashSet), 0b11, 0x22, -1, 0);
}
void myHashSetAdd(MyHashSet* this, int key) {
this->key[key] = true;
}
void myHashSetRemove(MyHashSet* this, int key) {
this->key[key] = false;
}
bool myHashSetContains(MyHashSet* this, int key) {
return this->key[key];
}
void myHashSetFree(MyHashSet* this) {
munmap(this, sizeof(MyHashSet));
}
/**
* Your MyHashSet struct will be instantiated and called as such:
* MyHashSet* obj = myHashSetCreate();
* myHashSetAdd(obj, key);
* myHashSetRemove(obj, key);
* bool param_3 = myHashSetContains(obj, key);
* myHashSetFree(obj);
*/