题解 | #设计LRU缓存结构#

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61

LRU缓存结构 javascript

/**
 * lru design
 * @param operators int整型二维数组 the ops
 * @param k int整型 the k
 * @return int整型一维数组
 */
function LRU( operators ,  k ) {
    var map = new Map();
    var temp;
    var result = [];
    for(let i = 0; i < operators.length; i++){
        if(operators[i][0] === 1){
         // map中已经存在该key,说明其对应value需要更新          
            if(map.has(operators[i][1])){
                map.delete(operators[i][1]);
            }else{ //map已满,需要找到最久未访问的删除后,再添加新键值对
                if(map.size==k){
                    const iterator = map.entries();
                    map.delete(iterator.next().value[0]);
                }
            }
            map.set(operators[i][1], operators[i][2]);
        }else{
            if(map.has(operators[i][1])){
                //如果map中有需要查询的key,先保存其值再删除然后添加,可保证这次访问后该键值对为最新插入,不会在删除时误删
                temp = map.get(operators[i][1]);
                map.delete(operators[i][1]);
                map.set(operators[i][1], temp)
                result.push(temp);
            }else{
                result.push(-1);
            }           
        }
    }
    return result;
}
module.exports = {
    LRU : LRU
};
全部评论
你好,我有一个问题: 在map已满时进行set,map.entries()返回的是map的迭代器,但是map的迭代器的迭代顺序和map的插入顺序是相同的 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map/entries 这里只是将第一个迭代的元素删除,也就是上一次插入时的元素,这是最近访问的元素啊,不是最久未访问的元素啊
点赞 回复 分享
发布于 2021-09-19 11:13

相关推荐

不愿透露姓名的神秘牛友
11-26 16:06
已编辑
快手电商 后端 23k-35k
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务