LRU Cache
https://leetcode.com/problems/lru-cache/
class Node:
def __init__(self,k,v):
self.key = k
self.val = v
self.next = None
self.prev = None
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.head = Node(0,0)
self.tail = Node(0,0)
self.d = dict()
self.head.next = self.tail
self.tail.prev = self.head
def get(self, key: int) -> int:
if key in self.d:
node = self.d[key]
self.__remove(node)
self.__add(node)
return node.val
return -1
def put(self, key: int, value: int) -> None:
node = Node(key,value)
if key in self.d:
self.__remove(self.d[key])
self.__add(node)
self.d[key] = node
if len(self.d) > self.capacity:
curr = self.head.next
self.__remove(curr)
del self.d[curr.key]
def __remove(self,node):
prev = node.prev
nxt = node.next
prev.next = nxt
nxt.prev = prev
def __add(self,node):
p = self.tail.prev
p.next = node
node.prev = p
node.next = self.tail
self.tail.prev = node
Last updated
Was this helpful?