演算法題:設計和實現一個 LRU Cache 快取機制

GetaChan發表於2019-11-29

題目來源於力扣

理論基礎

LRU演算法、Cache

實現LRU Cache快取機制

題目描述

設計和實現一個LRU Cache快取機制

解題思路

  1. least recently used 最近最少使用(被淘汰)
  2. Double LinkedList (雙向連結串列)
  3. O(1) 查詢頭部
  4. O(1) 修改、更新
  5. 實現讀、寫快取的操作

Python 解法

class LRUCache(object):

    def __init__(self, capacity):
        self.dic = collection.OrderedDict()
        self.remain = capacity

    def get(self, key):
        if key not in self.dic:
            return -1
        v = self.dic.pop(key)
        self.dic[key] = v  # 把當前訪問的key設定為最新
        return v

    def put(self, key, value):
        if key in self.dic:
            self.dic.pop(key)
        else:
            if self.remain > 0:
                self.remain -= 1
            else:  # 如果容量已滿
                self.dic.popitem(last=False) # 刪除最後一個鍵值對
        self.dic[key] = value

相關文章