跳到主要内容

编写代码实现LRU算法 ?

参考答案:

LRU(Least Recently Used)算法是一种常用的缓存淘汰策略,它选择最近最少使用的数据进行淘汰。以下是一个用Python实现的简单LRU缓存的例子:

class LRUCache:
    def __init__(self, capacity: int):
        self.cache = collections.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)  # 将数据移到队尾,表示最近使用过
            return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)  # 更新数据的位置到队尾
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)  # 弹出队首元素,即最久未使用的数据

这个实现中,我们使用了一个OrderedDict来存储缓存数据,它保持了键值对的插入顺序。当我们访问一个已经存在的键时,我们将其移到队尾,表示最近被使用过。当我们插入一个新的键值对时,如果缓存已满,我们就弹出队首的元素,即最久未使用的数据。这样,我们就实现了LRU缓存淘汰策略。