博客
关于我
leetcode-146. LRU 缓存机制
阅读量:246 次
发布时间:2019-03-01

本文共 1729 字,大约阅读时间需要 5 分钟。

在这里插入图片描述

核心,哈希表+双向链表
分类:

  • 添加节点(缓存未满)
  • 移除节点,添加节点(缓存满)
  • 更新节点(已有节点)

在get的时候断开节点得到独立节点,将节点放到head后面

在这里插入图片描述

class LRUCache {   public:    int capacity_,idle_;    struct Node{           int key_,val_;        Node* next;        Node* pre;        Node(int key,int val):key_(key),val_(val),next(NULL),pre(NULL){   }    };    Node* head=new Node(-1,-1);    Node* tail=new Node(-1,-1);    unordered_map
memo; LRUCache(int capacity):idle_(capacity),capacity_(capacity) { head->next=tail; tail->pre=head; } void putHead(Node* node){ node->next=head->next; node->pre=head; head->next->pre=node; head->next=node; } int get(int key) { if(memo.find(key)==memo.end()) return -1; memo[key]->next->pre=memo[key]->pre; memo[key]->pre->next=memo[key]->next; putHead(memo[key]); return memo[key]->val_; } void put(int key, int value) { if(memo.find(key)==memo.end()&&idle_>0){ idle_--; Node* node=new Node(key,value); memo[key]=node; } else if(memo.find(key)==memo.end()&&idle_==0){ Node* node=tail->pre; node->next->pre=node->pre; node->pre->next=node->next; memo.erase(node->key_); node->val_=value; node->key_=key; memo[key]=node; } else if(memo.find(key)!=memo.end()&&memo[key]!=NULL){ memo[key]->val_=value; memo[key]->next->pre=memo[key]->pre; memo[key]->pre->next=memo[key]->next; } putHead(memo[key]); // cout<
next->key_<
next->val_<
get(key); * obj->put(key,value); */

转载地址:http://kqav.baihongyu.com/

你可能感兴趣的文章
MySql用户以及权限的管理。
查看>>
MySQL用户权限配置:精细控制和远程访问的艺术!------文章最后有惊喜哦。
查看>>
mysql用户管理、常用语句、数据分备份恢复
查看>>
MySQL留疑问:left join时选on还是where?
查看>>
mysql登陆慢问题解决
查看>>
MySQL的 DDL和DML和DQL的基本语法
查看>>
mysql的 if else , case when then, IFNULL
查看>>
MySQL的10种常用数据类型
查看>>
MySQL的btree索引和hash索引的区别
查看>>
mysql的cast函数
查看>>
MySql的CRUD(增、删、改、查)操作
查看>>
MySQL的DATE_FORMAT()函数将Date转为字符串
查看>>
MySql的Delete、Truncate、Drop分析
查看>>
MySQL的Geometry数据处理之WKB方案
查看>>
MySQL的Geometry数据处理之WKT方案
查看>>
mysql的grant用法
查看>>
Mysql的InnoDB引擎的表锁与行锁
查看>>
mysql的InnoDB引擎索引为什么使用B+Tree
查看>>
MySQL的InnoDB默认隔离级别为 Repeatable read(可重复读)为啥能解决幻读问题?
查看>>
MySQL的insert-on-duplicate语句详解
查看>>