当前位置: 首页 > news >正文

LeetCode(65)LRU 缓存【链表】【中等】

在这里插入图片描述

目录

    • 1.题目
    • 2.答案
    • 3.提交结果截图

链接: LRU 缓存

1.题目

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。

实现 LRUCache 类:

  • LRUCache(int capacity)正整数 作为容量 capacity 初始化 LRU 缓存
  • int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1
  • void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。

函数 getput 必须以 O(1) 的平均时间复杂度运行。

示例:

输入
["LRUCache", "put", "put", "get", "put", "get", "put", "get", "get", "get"]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
输出
[null, null, null, 1, null, -1, null, -1, 3, 4]解释
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1);    // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2);    // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1);    // 返回 -1 (未找到)
lRUCache.get(3);    // 返回 3
lRUCache.get(4);    // 返回 4

提示:

  • 1 <= capacity <= 3000
  • 0 <= key <= 10000
  • 0 <= value <= 10^5
  • 最多调用 2 * 10^5getput

2.答案

class LRUCache {private Integer capacity;private Map<Integer, Integer> valueMap;private Queue<Integer> queue;public LRUCache(int capacity) {this.capacity = capacity;valueMap = new HashMap<>(capacity);queue = new ArrayDeque<>(capacity);}public int get(int key) {if (valueMap.containsKey(key)) {Integer value = valueMap.get(key);queue.remove(key);queue.offer(key);return value;} else {return -1;}}public void put(int key, int value) {Integer oldValue = valueMap.put(key, value);if (oldValue == null) {// 新增queue.offer(key);if (queue.size() > capacity) {// 逐出最久未使用的关键字Integer oldKey = queue.poll();valueMap.remove(oldKey);}} else {// 替换queue.remove(key);queue.offer(key);}}
}/*** 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);*/

3.提交结果截图

在这里插入图片描述

整理完毕,完结撒花~ 🌻

http://www.lryc.cn/news/261421.html

相关文章:

  • 网站提示“不安全”
  • 【Linux】驱动
  • Java研学-HTML
  • SpringBoot之响应的详细解析
  • redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板
  • 智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • illuminate/database 使用 五
  • 武汉灰京文化:益智游戏的教育与娱乐完美结合
  • arcgis api for js 中的query实现数据查询
  • AcWing 1250. 格子游戏(并查集)
  • CSS对文本的简单修饰
  • C++17中if和switch语句的新特性
  • 极坐标下的牛拉法潮流计算57节点MATLAB程序
  • 软件设计师——计算机网络(三)
  • 【ArkTS】循环控制与List的使用
  • 条款3:尽量使用const
  • Chromadb词向量数据库总结
  • Gin之GORM 操作数据库(MySQL)
  • 二十七、读写文件
  • flutter 代码混淆
  • 05 Vue中常用的指令
  • Mr. Cappuccino的第67杯咖啡——MacOS通过PD安装Win11
  • 【云原生kubernets】Service 的功能与应用
  • docker安装Prometheus
  • 了解 Flutter 3.16 功能更新
  • python之画动态图 gif效果图
  • 【JavaWeb】用注解代替配置文件
  • SpringBoot 3.0 升级之 Swagger 升级
  • AR游戏开发
  • Easy Excel生成复杂下Excel模板(下拉框)给用户下载