smj007

Untitled

Feb 11th, 2024
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.83 KB | None | 0 0
  1. class Node():
  2.     def __init__(self, key, value):
  3.         self.key, self.value = key, value
  4.         self.prev = None
  5.         self.next = None
  6.  
  7. class LRUCache:
  8.  
  9.     def __init__(self, capacity: int):
  10.         self.cap = capacity
  11.         self.hashmap = {}
  12.  
  13.         # initialise left and right node to arbitrary values
  14.         self.left, self.right = Node(0, 0), Node(0, 0)
  15.         # just fucking connect them
  16.         self.left.next = self.right
  17.         self.right.prev = self.left
  18.  
  19.     def remove(self, node: Node):
  20.         # update left and right pointers for the lru and mru
  21.         prv, nxt = node.prev, node.next
  22.         prv.next = nxt
  23.         nxt.prev = prv
  24.  
  25.     def insert(self, node:Node):
  26.         prev, nxt = self.right.prev, self.right
  27.         # make connections to the node
  28.         prev.next = node
  29.         nxt.prev = node
  30.         # make connections from the node
  31.         node.next = nxt
  32.         node.prev = prev
  33.  
  34.  
  35.     def get(self, key: int) -> int:
  36.         if key in self.hashmap:
  37.             # remove it to update late
  38.             self.remove(self.hashmap[key])
  39.             self.insert(self.hashmap[key])
  40.             return self.hashmap[key].value
  41.  
  42.         return -1
  43.  
  44.     def put(self, key: int, value: int) -> None:
  45.         if key in self.hashmap:
  46.             self.remove(self.hashmap[key])
  47.             self.hashmap[key] = Node(key, value)
  48.             self.insert(self.hashmap[key])
  49.         else:
  50.             self.hashmap[key] = Node(key, value)
  51.             self.insert(self.hashmap[key])
  52.  
  53.         if len(self.hashmap) > self.cap:
  54.             # remove LRU
  55.             LRU = self.left.next
  56.             self.remove(LRU)
  57.             del self.hashmap[LRU.key]
  58.    
  59.  
  60. # Your LRUCache object will be instantiated and called as such:
  61. # obj = LRUCache(capacity)
  62. # param_1 = obj.get(key)
  63. # obj.put(key,value)
Add Comment
Please, Sign In to add comment