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;

虚拟头尾节点。

相关推荐
ZTLJQ3 小时前
序列化的艺术:Python JSON处理完全解析
开发语言·python·json
H5css�海秀4 小时前
今天是自学大模型的第一天(sanjose)
后端·python·node.js·php
阿贵---4 小时前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
无敌昊哥战神4 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
x_xbx5 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
李昊哲小课6 小时前
第1章-PySide6 基础认知与环境配置
python·pyqt·pyside
2401_894241926 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python
木井巳7 小时前
【递归算法】子集
java·算法·leetcode·决策树·深度优先
lightqjx7 小时前
【算法】二分算法
c++·算法·leetcode·二分算法·二分模板
Zzzz_my7 小时前
正则表达式(RE)
pytorch·python·正则表达式