Advertisement
nirajs

lru

Jan 16th, 2024
662
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.59 KB | None | 0 0
  1. class ListNode:
  2.     def __init__(self, key, val):
  3.         self.key = key
  4.         self.val = val
  5.         self.prev = None
  6.         self.next = None
  7.  
  8.    
  9.  
  10. class LRUCache:
  11.  
  12.     def __init__(self, capacity: int):
  13.         self.dict = {}
  14.         self.capacity = capacity
  15.         self.head = ListNode(None, None)
  16.         self.tail = ListNode(None, None)
  17.         self.head.next = self.tail
  18.         self.tail.prev = self.head
  19.  
  20.  
  21.     def get(self, key: int) -> int:
  22.         if key not in self.dict:
  23.             return -1
  24.         node = self.dict[key]
  25.         value = node.val
  26.         self.remove(node)
  27.         self.add(node)
  28.         return value
  29.  
  30.        
  31.  
  32.     def put(self, key: int, value: int) -> None:
  33.         if key in self.dict:
  34.             old_node = self.dict[key]
  35.             self.remove(old_node)
  36.        
  37.         node = ListNode(key, value)
  38.         self.dict[key] = node
  39.         self.add(node)
  40.         if len(self.dict) > self.capacity:
  41.             node_to_delete = self.head.next
  42.             self.remove(node_to_delete)
  43.             del self.dict[node_to_delete.key]
  44.  
  45.     def add(self, node):
  46.         """
  47.        h a  b 'c' t
  48.        """
  49.         prev_node = self.tail.prev
  50.         node.prev = prev_node
  51.         node.next = self.tail
  52.         self.tail.prev = node
  53.         prev_node.next = node
  54.  
  55.  
  56.  
  57.  
  58.     def remove(self, node):
  59.         node.prev.next = node.next
  60.         node.next.prev = node.prev
  61.        
  62.        
  63.  
  64.  
  65. # Your LRUCache object will be instantiated and called as such:
  66. # obj = LRUCache(capacity)
  67. # param_1 = obj.get(key)
  68. # obj.put(key,value)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement