miglss

12.YA

May 24th, 2025
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.06 KB | None | 0 0
  1. class LinkedList:
  2.     def __init__(self, key = None, val = None, prev = None, next = None):
  3.         self.key = key
  4.         self.val = val
  5.         self.prev = prev
  6.         self.next = next
  7.  
  8. class LRUCache:
  9.  
  10.     def __init__(self, capacity: int):
  11.         self.capacity = capacity
  12.         self.hashmap = {}
  13.         self.lru = LinkedList()
  14.         self.mru = LinkedList()
  15.         self.lru.next = self.mru
  16.         self.mru.prev = self.lru
  17.    
  18.     def add_node(self, node):
  19.         self.mru.prev.next = node
  20.         node.next = self.mru
  21.         node.prev = self.mru.prev
  22.         self.mru.prev = node
  23.    
  24.     def delete_node(self, node):
  25.         prev_node = node.prev
  26.         next_node = node.next
  27.  
  28.         prev_node.next = next_node
  29.         next_node.prev = prev_node
  30.  
  31.         node.next = None
  32.         node.prev = None
  33.        
  34.  
  35.     def get(self, key: int) -> int:
  36.         if key in self.hashmap:
  37.             # update mru
  38.             node = self.hashmap[key]
  39.             self.delete_node(node)
  40.             self.add_node(node)
  41.             return self.hashmap[key].val
  42.         else:
  43.             return -1
  44.        
  45.     def put(self, key: int, value: int) -> None:
  46.         # Case 1: update
  47.         if key in self.hashmap:
  48.             node = self.hashmap[key]
  49.             node.val = value
  50.             self.delete_node(node)
  51.             self.add_node(node)
  52.         # Case 2: add, update mru, no deletion
  53.         elif len(self.hashmap) < self.capacity:
  54.             node = LinkedList(key = key, val = value)
  55.             self.hashmap[key] = node
  56.             self.add_node(node)
  57.         # Case 3: add, update mru, delete, update lru
  58.         else:
  59.             node = LinkedList(key = key, val = value)
  60.             self.hashmap[key] = node
  61.             self.add_node(node)
  62.  
  63.             node_to_del = self.lru.next
  64.             del self.hashmap[node_to_del.key]
  65.             self.delete_node(node_to_del)
  66.  
  67.        
  68.  
  69.  
  70. # Your LRUCache object will be instantiated and called as such:
  71. # obj = LRUCache(capacity)
  72. # param_1 = obj.get(key)
  73. # obj.put(key,value)
Advertisement
Add Comment
Please, Sign In to add comment