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

相关推荐
林希_Rachel_傻希希4 小时前
手写Promise最终版本
前端·javascript·面试
LYFlied4 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
阿里巴巴AI编程社区4 小时前
Qoder 提效实战:数据开发工程师用 Qoder 提效50%
数据结构
该用户已不存在4 小时前
Node.js后端开发必不可少的7个核心库
javascript·后端·node.js
踏浪无痕4 小时前
计算机算钱为什么会算错?怎么解决?
后端·算法·面试
消失的旧时光-19434 小时前
从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透
android·数据结构·链表
lang201509284 小时前
Kafka元数据缓存机制深度解析
分布式·缓存·kafka
IMPYLH4 小时前
Lua 的 IO (输入/输出)模块
开发语言·笔记·后端·lua
普通网友4 小时前
Objective-C 类的方法重载与重写:区别与正确使用场景
开发语言·ios·objective-c
夏乌_Wx4 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法