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

设计LRU缓存结构

http://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

信息结构, tuple (key, value) 是取用的数据对。

使用双向链表来作底层数据结构, 链表的容量为 capacity。 设置虚拟的头尾节点。 链表的顺序前后表示 tuple 读写的

使用Map作为各节点的地址寻址字典,Key 为 tuple的key, Value为节点Node。

为什么要用双向链表,便于删除操作。

  1. get的实现:

从map (meta) 中判断是否存在,如果不存在返回-1.

如果存在,则先获得 retNode, 用于return value。

接下来要进行链表的移位。 将retNode 移动到head之后的一号位置。

  1. put(set)的实现: 插入 <key, val2>

从map (meta) 中判断是否存在,如果不存在,则要将该tuple 插入到 head后的一号位置。

但要注意, 这里有capacity 的限制问题, 如果插入前,先作删除链表最后元素的操作; 删除之后再插入。

如果map(meta)中存在该信息, 则要进行移动位置(将key对应的node移动到一号位置)同时进行数据的刷新, Overwrite node的value为新的val2.

全部评论

相关推荐

10-29 16:42
门头沟学院 Java
1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下 1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点 2.根据1中的两点准备 3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了 4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题 好好准备,祝你面试顺利
我的求职进度条
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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