Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node():
- def __init__(self, key, value):
- self.key, self.value = key, value
- self.prev = None
- self.next = None
- class LRUCache:
- def __init__(self, capacity: int):
- self.cap = capacity
- self.hashmap = {}
- # initialise left and right node to arbitrary values
- self.left, self.right = Node(0, 0), Node(0, 0)
- # just fucking connect them
- self.left.next = self.right
- self.right.prev = self.left
- def remove(self, node: Node):
- # update left and right pointers for the lru and mru
- prv, nxt = node.prev, node.next
- prv.next = nxt
- nxt.prev = prv
- def insert(self, node:Node):
- prev, nxt = self.right.prev, self.right
- # make connections to the node
- prev.next = node
- nxt.prev = node
- # make connections from the node
- node.next = nxt
- node.prev = prev
- def get(self, key: int) -> int:
- if key in self.hashmap:
- # remove it to update late
- self.remove(self.hashmap[key])
- self.insert(self.hashmap[key])
- return self.hashmap[key].value
- return -1
- def put(self, key: int, value: int) -> None:
- if key in self.hashmap:
- self.remove(self.hashmap[key])
- self.hashmap[key] = Node(key, value)
- self.insert(self.hashmap[key])
- else:
- self.hashmap[key] = Node(key, value)
- self.insert(self.hashmap[key])
- if len(self.hashmap) > self.cap:
- # remove LRU
- LRU = self.left.next
- self.remove(LRU)
- del self.hashmap[LRU.key]
- # Your LRUCache object will be instantiated and called as such:
- # obj = LRUCache(capacity)
- # param_1 = obj.get(key)
- # obj.put(key,value)
Add Comment
Please, Sign In to add comment