【leetcode】146.LRU缓存js

题目

LRU是什么?

LRU是"Least Recently Used"的缩写,意思是"最近最少使用"。它是一种缓存淘汰策略,核心思想是:当缓存空间满了,需要淘汰数据时,优先淘汰那些最长时间没有被访问的数据。(学过操作系统页表那边应该深有体会吧要手工写的!)

代码-map

js里的map会记住键值对插入的顺序(本身内置了一个"插入顺序"的链表),因此可以利用这个特性把它当成"有序的哈希表"来用。

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

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

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

/** 
 * 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)
 */
相关推荐
垆边人似月.1 分钟前
任务混部(200 分档)
算法
言乐66 分钟前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
Rnan-prince19 分钟前
LeetCode 股票买卖系列:一个动态规划状态机模板通吃四题
leetcode·动态规划
如意猴24 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i27 分钟前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
圣保罗的大教堂1 小时前
leetcode 3756. 连接非零数字并乘以其数字和 II 中等
leetcode
樱花落木兰1 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
ShineWinsu2 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
朝朝辞暮i2 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法
Evand J3 小时前
【MATLAB例程】三维RRT+APF路径规划与AOA-TDOA融合定位算法。附代码的下载链接
算法·matlab·路径规划·rrt·tdoa·apf·aoa