数据类型:链表
时间复杂度:O(1)
空间复杂度:O(N)
代码实现:
class Node:def __init__(self, key=-1, value=-1):self.key = keyself.val = valueself.next = Noneself.prev = Noneclass LRUCache:def __init__(self, capacity: int):self.map = dict()self.cap = capacityself.left = Node()self.right = Node()self.right.prev = self.leftself.left.next = self.rightdef pop(self, node: Node):node.prev.next, node.next.prev = node.next, node.prevdef push(self, node: Node):last = self.right.prevlast.next = nodenode.prev, node.next = last, self.rightself.right.prev = nodedef get(self, key: int) -> int:if key not in self.map: return -1self.pop(self.map[key])self.push(self.map[key])return self.map[key].valdef put(self, key: int, value: int) -> None:if key in self.map:self.pop(self.map[key])elif self.cap == len(self.map):self.map.pop(self.left.next.key)self.pop(self.left.next)self.push(Node(key, value))self.map[key] = self.right.prev# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)