146 LRU缓存

python 复制代码
class DLinkedList:

    def __init__(self, key = 0, val = 0):
        self.prev = None
        self.next = None
        self.val = val
        self.key = key

class LRUCache:

    def __init__(self, capacity: int):
        self.head = DLinkedList()
        self.tail = DLinkedList()
        self.head.next = self.tail
        self.tail.prev = self.head
        self.cache = {}
        self.capacity = capacity

    def get(self, key: int) -> int:
        if key in self.cache:
            node = self.cache[key]
            self.remove(node)
            self.movetoHead(node)
            return self.cache[key].val
        
        return -1


    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            node = self.cache[key]
            node.val = value
            self.remove(node)
            self.movetoHead(node)
        else:

            if self.capacity == 0:
                del self.cache[self.tail.prev.key]
                self.remove(self.tail.prev)
                self.capacity += 1

            node = DLinkedList(key,value)
            self.cache[key] = node
            self.capacity -= 1
            self.movetoHead(node)

            
    
    def movetoHead(self, node):
        tmp = self.head.next
        self.head.next = node
        node.prev = self.head
        node.next = tmp
        tmp.prev = node

    def remove(self, node):
        prev = node.prev
        next = node.next
        prev.next = next
        next.prev = prev

重点:

操作模块化(remove, movetoHead);

双向链表,链表内保存key - value;

虚拟头尾节点。

相关推荐
云天徽上31 分钟前
【数据可视化-87】2023-2024年中国各省人口变化深度分析与可视化:Python + pyecharts打造炫酷暗黑主题大屏
开发语言·python·信息可视化·数据可视化·pyecharts
人工干智能1 小时前
游戏中角色持枪:玩家操控角色,角色转向时枪也要转向
python·游戏·pygame
桃源学社(接毕设)1 小时前
基于Django珠宝购物系统设计与实现(LW+源码+讲解+部署)
人工智能·后端·python·django·毕业设计
weixin_448617052 小时前
疏老师-python训练营-Day43复习日
开发语言·python
快去睡觉~2 小时前
力扣11:盛水最多的容器
算法·leetcode·职场和发展
华科云商xiao徐2 小时前
Node.js浏览器引擎+Python大脑的智能爬虫系统
爬虫·python·node.js
猿榜3 小时前
Python基础-Python简介
python
这里有鱼汤3 小时前
亲测可行!Streamlit项目完美打包成EXE分享教程(含xtquant坑点)
后端·python
crushqqi4 小时前
【跨服务器的数据自动化下载--安装公钥,免密下载】
服务器·python·自动化
qq_463944864 小时前
如何将新建的Anaconda虚拟环境导入Juputer内核中?
linux·windows·python