class Node{
public :
int key;
int val;
Node* prev;
Node* next;
Node( int key,int val) {
this- > key = key;
this- > val = val;
prev = NULL ;
next = NULL ;
}
} ;
class LRUCache {
public :
Node* head = new Node( - 1 ,- 1 ) ;
Node* tail = new Node( - 1 ,- 1 ) ;
int capacity;
unordered_map< int ,Node* > m;
LRUCache( int _capacity) {
capacity = _capacity;
head- > next = tail;
tail- > prev = head;
}
void addNode( Node* New) {
Node* temp = head- > next;
New- > next = temp;
New- > prev = head;
head- > next = New;
temp- > prev = New;
}
void deleteNode( Node* del) {
Node* delprev = del- > prev;
Node* delnext = del- > next;
delprev- > next = delnext;
delnext- > prev = delprev;
}
int get( int key) {
if ( m.find ( key) ! = m.end ( ) ) {
Node* resultNode = m[ key] ;
int ans = resultNode- > val;
m.erase ( key) ;
deleteNode( resultNode) ;
addNode( resultNode) ;
m[ key] = head- > next;
return ans;
}
else return - 1 ;
}
void put( int key, int value) {
if ( m.find ( key) ! = m.end ( ) ) {
Node* delNode = m[ key] ;
m.erase ( key) ;
deleteNode( delNode) ;
}
if ( m.size ( ) == capacity) {
m.erase ( tail- > prev- > key) ;
deleteNode( tail- > prev) ;
}
Node* New = new Node( key,value) ;
addNode( New) ;
m[ key] = head- > next;
}
} ;
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache* obj = new LRUCache(capacity);
* int param_1 = obj->get(key);
* obj->put(key,value);
*/
Y2xhc3MgTm9kZXsKICAgIHB1YmxpYzoKICAgICAgICBpbnQga2V5OwogICAgICAgIGludCB2YWw7CiAgICAgICAgTm9kZSogcHJldjsKICAgICAgICBOb2RlKiBuZXh0OwogICAgICAgIAogICAgICAgIE5vZGUoaW50IGtleSxpbnQgdmFsKXsKICAgICAgICAgICAgdGhpcy0+a2V5ID0ga2V5OwogICAgICAgICAgICB0aGlzLT52YWwgPSB2YWw7CiAgICAgICAgICAgIHByZXYgPSBOVUxMOwogICAgICAgICAgICBuZXh0ID0gTlVMTDsKICAgICAgICB9Cn07CgpjbGFzcyBMUlVDYWNoZSB7CnB1YmxpYzoKICAgICAKICAgIE5vZGUqIGhlYWQgPSBuZXcgTm9kZSgtMSwtMSk7CiAgICBOb2RlKiB0YWlsID0gbmV3IE5vZGUoLTEsLTEpOwogICAgaW50IGNhcGFjaXR5OwogICAgdW5vcmRlcmVkX21hcDxpbnQsTm9kZSo+IG07CiAgICAKICAgIExSVUNhY2hlKGludCBfY2FwYWNpdHkpIHsKICAgICAgICBjYXBhY2l0eSA9IF9jYXBhY2l0eTsKICAgICAgICBoZWFkLT5uZXh0ID0gdGFpbDsKICAgICAgICB0YWlsLT5wcmV2ID0gaGVhZDsKICAgIH0KICAgIHZvaWQgYWRkTm9kZShOb2RlKiBOZXcpewogICAgICAgIE5vZGUqIHRlbXAgPSBoZWFkLT5uZXh0OwogICAgICAgIE5ldy0+bmV4dCA9IHRlbXA7CiAgICAgICAgTmV3LT5wcmV2ID0gaGVhZDsKICAgICAgICBoZWFkLT5uZXh0ID0gTmV3OwogICAgICAgIHRlbXAtPnByZXYgPSBOZXc7CiAgICB9CiAgICB2b2lkIGRlbGV0ZU5vZGUoTm9kZSogZGVsKXsKICAgICAgICBOb2RlKiBkZWxwcmV2ID0gZGVsLT5wcmV2OwogICAgICAgIE5vZGUqIGRlbG5leHQgPSBkZWwtPm5leHQ7CiAgICAgICAgZGVscHJldi0+bmV4dCA9IGRlbG5leHQ7CiAgICAgICAgZGVsbmV4dC0+cHJldiA9IGRlbHByZXY7CiAgICB9CiAgICAKICAgIAogICAgCiAgICBpbnQgZ2V0KGludCBrZXkpIHsKICAgICAgICBpZihtLmZpbmQoa2V5KSE9bS5lbmQoKSl7CiAgICAgICAgICAgIE5vZGUqIHJlc3VsdE5vZGUgPSBtW2tleV07CiAgICAgICAgICAgIGludCBhbnMgPSByZXN1bHROb2RlLT52YWw7CiAgICAgICAgICAgIG0uZXJhc2Uoa2V5KTsKICAgICAgICAgICAgZGVsZXRlTm9kZShyZXN1bHROb2RlKTsKICAgICAgICAgICAgYWRkTm9kZShyZXN1bHROb2RlKTsKICAgICAgICAgICAgbVtrZXldID0gaGVhZC0+bmV4dDsKICAgICAgICAgICAgcmV0dXJuIGFuczsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gLTE7CiAgICB9CiAgICAKICAgIHZvaWQgcHV0KGludCBrZXksIGludCB2YWx1ZSkgewogICAgICAgaWYobS5maW5kKGtleSkhPW0uZW5kKCkpewogICAgICAgICAgIE5vZGUqIGRlbE5vZGUgPSBtW2tleV07CiAgICAgICAgICAgbS5lcmFzZShrZXkpOwogICAgICAgICAgIGRlbGV0ZU5vZGUoZGVsTm9kZSk7CiAgICAgICB9CiAgICAgICAgaWYobS5zaXplKCk9PWNhcGFjaXR5KXsKICAgICAgICAgICAgbS5lcmFzZSh0YWlsLT5wcmV2LT5rZXkpOwogICAgICAgICAgICBkZWxldGVOb2RlKHRhaWwtPnByZXYpOwogICAgICAgIH0KICAgICAgICBOb2RlKiBOZXcgPSBuZXcgTm9kZShrZXksdmFsdWUpOwogICAgICAgIGFkZE5vZGUoTmV3KTsKICAgICAgICBtW2tleV0gPSBoZWFkLT5uZXh0OwogICAgfQp9OwoKLyoqCiAqIFlvdXIgTFJVQ2FjaGUgb2JqZWN0IHdpbGwgYmUgaW5zdGFudGlhdGVkIGFuZCBjYWxsZWQgYXMgc3VjaDoKICogTFJVQ2FjaGUqIG9iaiA9IG5ldyBMUlVDYWNoZShjYXBhY2l0eSk7CiAqIGludCBwYXJhbV8xID0gb2JqLT5nZXQoa2V5KTsKICogb2JqLT5wdXQoa2V5LHZhbHVlKTsKICov
compilation info
prog.cpp: In constructor ‘Node::Node(int, int)’:
prog.cpp:11:20: error: ‘NULL’ was not declared in this scope
prev = NULL;
^~~~
prog.cpp:11:20: note: ‘NULL’ is defined in header ‘<cstddef>’; did you forget to ‘#include <cstddef>’?
prog.cpp:1:1:
+#include <cstddef>
class Node{
prog.cpp:11:20:
prev = NULL;
^~~~
prog.cpp: At global scope:
prog.cpp:22:5: error: ‘unordered_map’ does not name a type
unordered_map<int,Node*> m;
^~~~~~~~~~~~~
prog.cpp: In member function ‘int LRUCache::get(int)’:
prog.cpp:46:12: error: ‘m’ was not declared in this scope
if(m.find(key)!=m.end()){
^
prog.cpp: In member function ‘void LRUCache::put(int, int)’:
prog.cpp:59:11: error: ‘m’ was not declared in this scope
if(m.find(key)!=m.end()){
^
prog.cpp:64:12: error: ‘m’ was not declared in this scope
if(m.size()==capacity){
^
prog.cpp:70:9: error: ‘m’ was not declared in this scope
m[key] = head->next;
^
stdout