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

相关推荐
必须得开心呀9 分钟前
python编写带界面的软件,需要安装哪些插件
开发语言·python
青少儿编程课堂44 分钟前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
不会就选b1 小时前
算法日常・每日刷题--<动态规划>19
算法·leetcode·职场和发展
刘发财1 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
A接拉起0072 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
_馒头2 小时前
pixiJs游戏开发实践 - 跳棋小游戏
javascript·vue.js
沫璃染墨2 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
没有钱的钱仔2 小时前
协方差矩阵含义
算法·机器学习·矩阵
垆边人似月.2 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为