Advertisement
Iam_Sandeep

Implement LRU cache in Python

Jul 15th, 2022
977
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.39 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, key, val):
  3.         self.key, self.val = key, val
  4.         self.prev = self.next = None
  5.    
  6. class LRUCache:
  7.  
  8.     def __init__(self, capacity: int):
  9.         self.cap = capacity
  10.         self.cache = {} # map key to node
  11.        
  12.         self.left, self.right = Node(0, 0), Node(0, 0)
  13.         self.left.next, self.right.prev = self.right, self.left
  14.  
  15.     # remove node from list
  16.     def remove(self, node):
  17.         prev, nxt = node.prev, node.next
  18.         prev.next, nxt.prev = nxt, prev
  19.    
  20.     # insert node at right
  21.     def insert(self, node):
  22.         prev, nxt = self.right.prev, self.right
  23.         prev.next = nxt.prev = node
  24.         node.next, node.prev = nxt, prev
  25.        
  26.     def get(self, key: int) -> int:
  27.         if key in self.cache:
  28.             self.remove(self.cache[key])
  29.             self.insert(self.cache[key])
  30.             return self.cache[key].val
  31.         return -1
  32.        
  33.     def put(self, key: int, value: int) -> None:
  34.         if key in self.cache:
  35.             self.remove(self.cache[key])
  36.         self.cache[key] = Node(key, value)
  37.         self.insert(self.cache[key])
  38.        
  39.         if len(self.cache) > self.cap:
  40.             # remove from the list and delete the LRU from hashmap
  41.             lru = self.left.next
  42.             self.remove(lru)
  43.             print(lru in self.cache)
  44.             del self.cache[lru.key]
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement