题目描述
设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。
它应该支持以下操作: 获取数据 get 和 写入数据 put 。
获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。
写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。
示例:
1 | LRUCache cache = new LRUCache( 2 /* 缓存容量 */ ); |
思路
使用 HashMap 存放 key-value ,使用 LinkedList 来存放 key 来实现LRU。
get()方法中:
- 若传入的 key 存在于 map 中,则在 list 中将该元素移到 list 的末尾(即移除该元素,然后添加到末尾);
- 若不存在,则返回-1。
put()方法中:
- 若传入的 key 存在于 map 中,则在 list 中将该元素移到 list 的末尾,然后在 map 中更新该 key 对应的 value ;
- 若不存在:
- 是否达到容量,若是,则将 list 的首位移除,且在 map 中也移除该元素;
- 若没到达容量,则将新元素加入到 list 的末尾,并且加入到 map 中。
代码
1 | lass LRUCache { |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lru-cache-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。