LeetCode 146. LRU缓存机制
class LRUCache {
public:
struct node
{
int key,val;
node *l,*r;
node(int a,int b)
{
l=r=NULL;
key=a;
val=b;
}
}*L,*R;
unordered_map<int,node*> mp;//保存key和节点的映射,使得查找O(1)
int n;
LRUCache(int capacity) {
L=new node(-1,-1),R=new node(-1,-1);//创建双端链表两头节点
L->r=R;R->l=L;
n=capacity;
}
int get(int key) {
if(mp.count(key))
{
auto p=mp[key];
//更新优先级
remove(p);
insert(p);
return mp[key]->val;
}
else return -1;
}
void put(int key, int value) {
if(mp.count(key))
{
auto p=mp[key];
p->val=value;
remove(p);
insert(p);
}
else//插入新节点
{
node * t=new node(key,value);
if(mp.size()==n)//删除最久未使用的节点
{
auto p=R->l;
remove(p);
mp.erase(p->key);
delete p;
}
mp[key]=t;
insert(t);
}
}
void insert(node *p)//往头部插入
{
L->r->l=p;
p->r=L->r;
L->r=p;
p->l=L;
}
void remove(node *p)
{
p->r->l=p->l;
p->l->r=p->r;
}
};
/**
* 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);
*/
有帮助的话可以点个赞,我会很开心的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具