题目


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)
*/