LeetCode146题:LRU缓存(python3)

在这里插入图片描述
代码思路:
Python 默认是用 dict 存储属性的,每次用 . 访问属性都需要查字典。如果声明 slots 就不会创建字典,而是改用指针偏移量直接拿到属性对象。所以即节省了内存(没有字典)又节省了时间(省去查字典的过程)。

class Node:
    __slots__ = 'prev','next','key','value'

    def __init__(self,key=0,value=0):
        self.key = key
        self.value = value
    


class LRUCache:

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.dummy = Node()
        self.dummy.prev = self.dummy
        self.dummy.next = self.dummy
        self.key_to_node = dict()
    
    def get_node(self,key:int) -> Optional[Node]:
        if key not in self.key_to_node: #没有的话
            return None
        node = self.key_to_node[key] #有
        self.remove(node)
        self.push_front(node) #放到最前面
        return node


    def get(self, key: int) -> int:
        node = self.get_node(key)
        return node.value if node else -1


    def put(self, key: int, value: int) -> None:
        node = self.get_node(key)
        if node:
            node.value = value #更新value
            return
        self.key_to_node[key] = node = Node(key,value)
        self.push_front(node)
        if len(self.key_to_node) > self.capacity:
            back_node = self.dummy.prev
            del self.key_to_node[back_node.key]
            self.remove(back_node)
    
    def remove(self, x:Node) -> None:
        x.prev.next = x.next
        x.next.prev = x.prev

    def push_front(self, x:Node) -> None:
        x.prev = self.dummy
        x.next = self.dummy.next
        x.prev.next = x
        x.next.prev = x

相关推荐

  1. LeetCode-146.LRU缓存Python

    2024-03-10 06:28:04       44 阅读
  2. leetcodeHOT146. LRU 缓存

    2024-03-10 06:28:04       17 阅读
  3. LeetCode-热100:146. LRU 缓存

    2024-03-10 06:28:04       18 阅读
  4. LeetCode——146. LRU 缓存(HOT100)

    2024-03-10 06:28:04       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 06:28:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 06:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 06:28:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 06:28:04       20 阅读

热门阅读

  1. 设计模式: 单例模式 ④

    2024-03-10 06:28:04       24 阅读
  2. Python 利用string.Template完成字符串替换

    2024-03-10 06:28:04       21 阅读
  3. 支持向量机(SVM)算法基本原理&skearn实现

    2024-03-10 06:28:04       18 阅读
  4. 【LeetCode】2386. 找出数组的第 K 大和

    2024-03-10 06:28:04       21 阅读
  5. python绘制水果价格与利润表图1-3

    2024-03-10 06:28:04       22 阅读
  6. 网页的用户注册功能

    2024-03-10 06:28:04       25 阅读
  7. 【Spring高级】第3讲 Bean的生命周期

    2024-03-10 06:28:04       23 阅读
  8. 力扣382周赛

    2024-03-10 06:28:04       22 阅读
  9. 人机环境系统与媒体

    2024-03-10 06:28:04       26 阅读