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

【算法】LRU置换算法

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。
实现 LRUCache 类:

LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?

#哈希链表结构
class LRUCache {/*** @param Integer $capacity*/private $queue = [];private $cache = [];function __construct($capacity) {$this->capacity = $capacity;}/*** @param Integer $key* @return Integer*/function get($key) {if (isset($this->cache[$key])) {if ($pos = array_search($key, $this->queue)) {unset($this->queue[$pos]);array_unshift($this->queue, $key);}return $this->cache[$key];}return -1;}/*** @param Integer $key* @param Integer $value* @return NULL*/function put($key, $value) {if (isset($this->cache[$key])) {$pos = array_search($key, $this->queue);unset($this->queue[$pos]);} elseif (count($this->queue) >= $this->capacity) {$k = array_pop($this->queue);unset($this->cache[$k]);}array_unshift($this->queue, $key);$this->cache[$key] = $value;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux——用户和权限
  • K8S CronJob
  • 【QNX+Android虚拟化方案】114 - QNX /dev/switch 节点创建 及 读写功能实现实例
  • OpenCPN Compiling on Windows
  • Python 数据分析笔记— Numpy 基本操作(上)
  • C++笔记---模板初阶
  • Elasticsearch7.14.2集群部署和elk部署
  • C#中通过TabControl控制MDI子窗体显示切换的实现过程
  • jmeter响应断言、json断言、断言持续时间、大小断言操作
  • pytest.mark简介
  • RabbitMQ中的死信交换机?(RabbitMQ延迟队列有了解过吗)
  • [Labview] 表格改值后单元格编辑功能,更改颜色、字体、颜色等
  • sqli-labs靶场通关攻略(五十一到五十六关)
  • 数据线性结构
  • Notepad++回车不自动补全
  • [笔记] php常见简单功能及函数
  • 【个人向】《HTTP图解》阅后小结
  • express + mock 让前后台并行开发
  • happypack两次报错的问题
  • java 多线程基础, 我觉得还是有必要看看的
  • java小心机(3)| 浅析finalize()
  • jdbc就是这么简单
  • Spring-boot 启动时碰到的错误
  • VUE es6技巧写法(持续更新中~~~)
  • zookeeper系列(七)实战分布式命名服务
  • 百度地图API标注+时间轴组件
  • 测试如何在敏捷团队中工作?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 全栈开发——Linux
  • 数据仓库的几种建模方法
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 为什么要用IPython/Jupyter?
  • 我是如何设计 Upload 上传组件的
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个货车 loader
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Java入门)抽象类,接口,内部类
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Note)C++中的继承方式
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (简单) HDU 2612 Find a way,BFS。
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (状压dp)uva 10817 Headmaster's Headache
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ./和../以及/和~之间的区别
  • .aanva
  • .htaccess配置重写url引擎
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 受管制代码
  • .NET 药厂业务系统 CPU爆高分析