您的当前位置:首页正文

实现一个LRU

2024-11-27 来源:个人技术集锦

LRU

from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        else:
            self.cache.move_to_end(key)  # 将访问的key移动到末尾,表示最近使用
            return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)  # 更新key的最近使用状态
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)  # 弹出最久未使用的key(即OrderedDict的第一个元素)

# 使用示例
cache = LRUCache(2)  # 缓存容量为2

cache.put(1, 1)
cache.put(2, 2)
print(cache.get(1))       # 返回  1
cache.put(3, 3)           # 该操作会使得键 2 作废
print(cache.get(2))       # 返回 -1 (未找到)
cache.put(4, 4)           # 该操作会使得键 1 作废
print(cache.get(1))       # 返回 -1 (未找到)
print(cache.get(3))       # 返回  3
print(cache.get(4))       # 返回  4
显示全文