LRU Cache LeetCode solution in C++

1
class LRUCache {
2
public:
3
int mx;
4
class node {
5
public:
6
node *prev, *next;
7
int key, val;
8
node(int k, int v) {
9
key = k, val = v;
10
}
11
};
12
unordered_map<int, node *> mp;
13
node *head = new node(-1, -1);
14
node *tail = new node(-1, -1);
15
LRUCache(int capacity) {
16
mx = capacity;
17
mp.reserve(1024);
18
mp.max_load_factor(0.25);
19

20
head->next = tail;
21
tail->prev = head;
22
}
23

24
void addnode(node *temp) {
25
node *temp1 = head->next;
26
head->next = temp;
27
temp->prev = head;
28
temp->next = temp1;
29
temp1->prev = temp;
30
}
31

32
void deletenode(node *temp) {
33
node *temp1 = temp->prev;
34
node *temp2 = temp->next;
35
temp1->next = temp2;
36
temp2->prev = temp1;
37
}
38

39
int get(int key) {
40
if (mp.find(key) != mp.end()) {
41
node *temp = mp[key];
42
int res = temp->val;
43
mp.erase(key);
44
deletenode(temp);
45
addnode(temp);
46
mp[key] = head->next;
47
return res;
48
}
49
return -1;
50
}
51

52
void put(int key, int value) {
53
if (mp.find(key) != mp.end()) {
54
node *temp = mp[key];
55
mp.erase(key);
56
deletenode(temp);
57
}
58
if (mp.size() == mx) {
59
mp.erase(tail->prev->key);
60
deletenode(tail->prev);
61
}
62
addnode(new node(key, value));
63
mp[key] = head->next;
64
}
65
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0