35.LRU 缓存

javascript 复制代码
/**
 * @param {number} capacity
 */
var LRUCache = function (capacity) {
    this.capacity = capacity
    this.cache = new Map()
};

/** 
 * @param {number} key
 * @return {number}
 */
LRUCache.prototype.get = function (key) {
      if (this.cache.has(key)) {  
        const value = this.cache.get(key)
        this.cache.delete(key)
        this.cache.set(key, value)
        return value
    }
    return -1
};

/** 
 * @param {number} key 
 * @param {number} value
 * @return {void}
 */
LRUCache.prototype.put = function (key, value) {
    if(this.cache.has(key)){
        this.cache.delete(key)
    }else if(this.cache.size>=this.capacity){
        const firstKey = this.cache.keys().next().value
        this.cache.delete(firstKey)
    }
    this.cache.set(key,value)
};

/** 
 * Your LRUCache object will be instantiated and called as such:
 * var obj = new LRUCache(capacity)
 * var param_1 = obj.get(key)
 * obj.put(key,value)
 */

解题思路

使用map来保存缓存对象,每次使用后都先删除原来的键值对,再重新增加,让他放在最后,使用this.cache.keys().next().value来获取第一个键值对的键,即最长时间未使用的

详细解法

1.在构造方法中定义最大缓存数量和缓存对象

2.在get方法中判断读取的键是否存在,存在就先删除原来的键值对,再重新增加,让他放在最后,然后换回他的值,不存在就返回-1

3.在put方法中判断读取的键是否存在,存在就先删除原来的键值对(更新使用情况),以及键值对数量是否超过限制,超过限制就删除第一个键值对,最后统一添加要添加的键值对

相关推荐
xkxnq4 小时前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
Morwit4 小时前
Qt qml创建c++类的单例对象
开发语言·c++·qt
晓得迷路了4 小时前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
古城小栈4 小时前
Rust 已经自举,却仍需GNU与MSVC工具链的缘由
开发语言·rust
怕浪猫4 小时前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jarreyer4 小时前
数据项目分析标准化流程
开发语言·python·机器学习
闻缺陷则喜何志丹4 小时前
【回文 字符串】3677 统计二进制回文数字的数目|2223
c++·算法·字符串·力扣·回文
鹏多多4 小时前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
你怎么知道我是队长4 小时前
C语言---printf函数使用详细说明
c语言·开发语言
青云交4 小时前
Java 大视界 -- 基于 Java+Redis Cluster 构建分布式缓存系统:实战与一致性保障(444)
java·redis·缓存·缓存穿透·分布式缓存·一致性保障·java+redis clus