All O`one Data Structure LeetCode solution in C++

1
class AllOne {
2
public:
3
map<int, unordered_set<string>> minmax;
4
unordered_map<string, int> count;
5
AllOne() {}
6

7
void inc(string key) {
8
int was = count[key]++;
9
if (was > 0) {
10
minmax[was].erase(key);
11
if (minmax[was].size() == 0) minmax.erase(was);
12
}
13
minmax[was + 1].insert(key);
14
}
15

16
void dec(string key) {
17
int was = count[key]--;
18
minmax[was].erase(key);
19
if (minmax[was].size() == 0) minmax.erase(was);
20
if (was - 1 == 0) {
21
count.erase(key);
22
} else {
23
minmax[was - 1].insert(key);
24
}
25
}
26

27
string getMaxKey() {
28
return minmax.size() == 0 ? "" : *minmax.rbegin()->second.begin();
29
}
30

31
string getMinKey() {
32
return minmax.size() == 0 ? "" : *minmax.begin()->second.begin();
33
}
34
};
35

36
/**
37
* Your AllOne object will be instantiated and called as such:
38
* AllOne* obj = new AllOne();
39
* obj->inc(key);
40
* obj->dec(key);
41
* string param_3 = obj->getMaxKey();
42
* string param_4 = obj->getMinKey();
43
*/

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0