Leetecode——面试题 16.25. LRU缓存
Posted dtwd886
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetecode——面试题 16.25. LRU缓存相关的知识,希望对你有一定的参考价值。
常考。最初建立头部尾部哑结点,两者相互指向。注意的是push时本身有key是应该对其进行更新,并将其移到头部。
不然再根据是否容量足够来判断是否需要删除尾部结点,然后将其放置到头部哑结点后面一位。
get时有对应结点需要将当前结点从结点位置移动到头部后一个结点。
class LRUCache
private:
int _capacity;
int count_node=0;
struct Node
Node(int _key,int _val)
key=_key;
val=_val;
int val;
int key;
Node* pre=nullptr;
Node* next=nullptr;
;
unordered_map<int,Node*>key_Node;
Node* hair;
Node* tail;
public:
LRUCache(int capacity)
_capacity=capacity;
hair=new Node(-1,-1);
tail=new Node(-2,-2);
hair->next=tail;
tail->pre=hair;
int get(int key)
if(key_Node.find(key)!=key_Node.end())
Node* temp=key_Node[key];
removeNode(temp);
addToHead(temp);
return temp->val;
return -1;
void put(int key, int value)
if(key_Node.find(key)==key_Node.end())
Node* temp=new Node(key,value);
key_Node[key]=temp;
if(count_node<_capacity)
count_node++;
addToHead(temp);
else
removeTail();
addToHead(temp);
else
Node* temp=key_Node[key];
temp->val=value;
removeNode(temp);
addToHead(temp);
void removeNode(Node* node)
node->pre->next=node->next;
node->next->pre=node->pre;
void addToHead(Node* node)
node->next=hair->next;
node->pre=hair;
hair->next->pre=node;
hair->next=node;
void removeTail()
Node* temp=tail->pre;
cout<<temp->val<<endl;
temp->pre->next=tail;
tail->pre=temp->pre;
key_Node.erase(temp->key);
delete(temp);
;
以上是关于Leetecode——面试题 16.25. LRU缓存的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript算法题实现-146-LRU缓存机制——腾讯面试题库