146 LRU缓存

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;

虚拟头尾节点。

相关推荐

  1. 【难点】【LRU146.LRU缓存

    2024-04-08 05:50:06       65 阅读
  2. 146. LRU 缓存

    2024-04-08 05:50:06       70 阅读
  3. 146. LRU 缓存

    2024-04-08 05:50:06       60 阅读
  4. 146. LRU 缓存

    2024-04-08 05:50:06       61 阅读
  5. 146 LRU缓存

    2024-04-08 05:50:06       37 阅读
  6. 146.LRU缓存

    2024-04-08 05:50:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 05:50:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 05:50:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 05:50:06       82 阅读
  4. Python语言-面向对象

    2024-04-08 05:50:06       91 阅读

热门阅读

  1. HTTP的强制缓存和协商缓存

    2024-04-08 05:50:06       36 阅读
  2. HTTPS中的TLS和TCP能同时握手吗

    2024-04-08 05:50:06       38 阅读
  3. GMSSL学习笔记

    2024-04-08 05:50:06       33 阅读
  4. 网络安全之SQL注入

    2024-04-08 05:50:06       35 阅读
  5. ubuntu18.04-arm7v架构下构建Telegraf自定义系统服务

    2024-04-08 05:50:06       32 阅读
  6. ubuntu怎么按安装时间显示已安装的软件

    2024-04-08 05:50:06       32 阅读
  7. 使用docx4j转换word为pdf处理中文乱码问题

    2024-04-08 05:50:06       33 阅读
  8. @SpringBootApplication 详解

    2024-04-08 05:50:06       33 阅读
  9. Springboot 集成Rabbitmq之延时队列

    2024-04-08 05:50:06       33 阅读
  10. hadoop streaming及hadoop官方文档

    2024-04-08 05:50:06       38 阅读