LRU 缓存

题目链接:

LRU 缓存

题解:

  1. 我刚开始想用栈,但是题目提到需要 O(1) 的时间复杂度,所以我放弃使用栈,因为这个涉及到数组的遍历,最后使用了map

  2. map获取到的顺序和插入顺序一致,所以采用map这个数据结构

  3. 使用map有几个坑没注意到,首先是 size 我下意识写成了方法,以及keys返回的是一个迭代器对象,而不是数组,我刚开始的写法是 keys()0 后面查了官方文档发现不对,最后改成 next().value ,获取第一个插入的元素的key 删掉

  4. 实现思路很简单,如果当前map包含,则删除重新放入,如果超出最大size,则删去第一个然后继续放入。

  5. 注意审题,题目提到如果不存在返回-1 而不是null

code:

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

/** 
 * @param {number} key
 * @return {number}
 */
LRUCache.prototype.get = function (key) {
    if (this.map.has(key)) {
        //如果有这个key
        let value = this.map.get(key)
        this.map.delete(key)
        this.map.set(key, value)
        return value
    }
    else return -1
};

/** 
 * @param {number} key 
 * @param {number} value
 * @return {void}
 */
LRUCache.prototype.put = function (key, value) {
    if (this.map.has(key)) {
        // 如果有这个key
        this.map.delete(key)
        this.map.set(key, value)
    }
    else {
        if (this.map.size >= this.maxSize) {
            console.log(this.map.keys().next().value)
            this.map.delete(this.map.keys().next().value)
            this.map.set(key, value)
        }
        else {
            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)
 */
相关推荐
不会C语言的男孩4 分钟前
C++ Primer 第2章:变量和基本类型
开发语言·c++
wuxia21186 分钟前
微信小程序单击元素切换元素的显示和隐藏
javascript·微信小程序·setdata
JustHappy13 分钟前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本20 分钟前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处23 分钟前
Java从零到熟练(三):流程控制
java·开发语言·python
weixin_4713830343 分钟前
图片预解码缓存
前端·浏览器缓存·图片预解码
一起学开源1 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽8081 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
郑洁文2 小时前
基于网络爬虫的Web敏感信息泄露自动化检测工具
前端·爬虫·网络安全·自动化
游九尘2 小时前
JavaScript 实现三段式版本号对比函数(app升级用)
javascript·uni-app