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;

虚拟头尾节点。

相关推荐
青春:一叶知秋5 小时前
【Redis存储】List列表
数据库·redis·缓存
FL171713145 小时前
Pytorch保存pt和pkl
人工智能·pytorch·python
爱学习的小道长7 小时前
进程、线程、协程三者的区别和联系
python·ubuntu
L-李俊漩8 小时前
MMN-MnnLlmChat 启动顺序解析
开发语言·python·mnn
大雷神8 小时前
HarmonyOS 横竖屏切换与响应式布局实战指南
python·深度学习·harmonyos
钅日 勿 XiName8 小时前
一小时速通pytorch之训练分类器(四)(完结)
人工智能·pytorch·python
le serein —f8 小时前
用go实现-反转链表
leetcode·链表·golang
青瓷程序设计9 小时前
水果识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
*才华有限公司*9 小时前
基于BERT的文本分类模型训练全流程:从环境搭建到显存优化实战
python
EndingCoder10 小时前
会话管理与Cookie安全
redis·安全·缓存·it·cookie