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

【算法】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;
    }
}


http://www.kler.cn/a/287580.html

相关文章:

  • ReactPress与WordPress:一场内容管理系统的较量
  • 热点更新场景,OceanBase如何实现性能优化
  • el-table中增加校验方法(二)
  • 【Fargo】23:采集时间转rtp时间
  • 哈希表学习分享
  • LabVIEW中的UDP与TCP比较
  • 【Tools】什么是MapReduce
  • 【软考】多媒体知识
  • 异步并发处理利器:在 Jupyter Notebook 中玩转 asyncio
  • Html 添加音效音乐音频播放和震动效果
  • Python测试开发基础(三)---random模块
  • form-data和x-www-form-urlencoded的区别
  • 银行业务-结算、代理、托管
  • 【C++】将myString类中能够实现的操作都实现一遍
  • Golang | Leetcode Golang题解之第388题文件的最长绝对路径
  • STM32:TIM定时中断配置的最全库函数讲解笔记
  • 微博视频无水印下载的方法
  • 点餐收银小程序
  • mybatis自定义复杂条件拼接
  • element-ui 表单Cannot read property ‘indexOf‘ of undefined
  • 智能体与在线实用工具:协同并进,提升生活效率
  • 安达发|户外设备制造APS排程的多层级BOM订单拉动
  • 逆向中的游戏-入土为安的第二十五天
  • matlab2024a/2023/2022/2020/matlab2019 如何plot画局部放大图(已解决)
  • Redis的内存淘汰策略—— volatile-random
  • unity的语言问题记录(委托相关)