题解 | #设计LRU缓存结构#

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61

键值对的查询,首选 map。又因为本题中 map 只是用来查询,不涉及排序,所以采用 unordered_map

维护最近使用的元素,这涉及了出队和入队的概念,但因为 queue 只能操作头部和尾部的元素,所以不适用于本题。

而 list 既满足了对头/尾元素的操作,也可以对中间元素进行删除操作,所以选用 list。

list 中只需要维护 map 中的值就足够了,不需要维护 pair<key, value>

假设list的最后一个元素是最新访问的
set方法注意判断:
1. key 或 value 值有误,返回空
2. key 在dict中,移除key
3. key不在dict中,判断list是否满了
满的话,先删除list中的第一个元素(用pop方法),并删除dict中的k-v,用del方法

更新dict中的k-v以及list中的最后一个元素。

未完待续……

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-05 04:14
已编辑
真烦好烦真烦:看着感觉好强啊,这都过不了吗
投递字节跳动等公司7个岗位 面试中的破防瞬间
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务