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 valuekeyinto the HashSet.bool contains(key)Returns whether the valuekeyexists in the HashSet or not.void remove(key)Removes the valuekeyin the HashSet. Ifkeydoes 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^4calls 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);
*/