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;

虚拟头尾节点。

相关推荐
元亓亓亓11 分钟前
LeetCode--279. 完全平方数--中等
算法·leetcode·动态规划
Franklin15 分钟前
如何解决git HEAD detached 分离头指针问题
git·python·pycharm
deephub24 分钟前
Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
人工智能·python·自动化·大语言模型·行为评估
shuair26 分钟前
redis缓存双写
redis·缓存·mybatis
万兴丶28 分钟前
批量转换音频格式工具
python
大学就业之家30 分钟前
智能选岗的陷阱与应对策略
python
chenshi178131 分钟前
安全合规:使用 RPA 批量发布时,如何规避平台封禁风险,实现长效稳定的投喂?
python
superman超哥43 分钟前
仓颉性能瓶颈定位方法深度解析
c语言·开发语言·c++·python·仓颉
岁岁的O泡奶1 小时前
NSSCTF_crypto_[SWPU 2020]happy
经验分享·python·算法·密码学
武汉唯众智创1 小时前
“物联网 Python 开发教程”课程教学解决方案
开发语言·python·物联网·物联网技术·物联网 python 开发·python 开发