Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LRU 缓存策略 ,中等难度 #102

Open
AwesomeDevin opened this issue Sep 18, 2023 · 0 comments
Open

LRU 缓存策略 ,中等难度 #102

AwesomeDevin opened this issue Sep 18, 2023 · 0 comments

Comments

@AwesomeDevin
Copy link
Owner

实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。

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

/** 
 * @param {number} key
 * @return {number}
 */
LRUCache.prototype.get = function(key) {

    const res = this.map.get(key)
    if(typeof res !== 'undefined'){
        this.map.delete(key)
        this.map.set(key, res)
        return res
    }
    return -1
};

/** 
 * @param {number} key 
 * @param {number} value
 * @return {void}
 */
LRUCache.prototype.put = function(key, value) {
    const hasKey = this.map.get(key) 
    if(this.map.size >= this.capacity && !hasKey ) { // 没有空间了且为新增key,才腾空间
        this.map.delete(this.map.keys().next().value)
    }
    if(hasKey){
        this.get(key) // 更新位置
    }
    this.map.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)
 */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant