Advertisement
Kostiggig

LruCache LeetCode

Jan 8th, 2023
625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.66 KB | None | 0 0
  1. class LRUCache {
  2.  
  3.     final Node head = new Node();
  4.     final Node tail = new Node();
  5.     final Map<Integer, Node> nodeMap;
  6.     final int capacity;
  7.  
  8.     public LRUCache(int capacity) {
  9.         nodeMap = new HashMap<>(capacity);
  10.         this.capacity = capacity;
  11.         head.next = tail;
  12.         tail.prev = head;
  13.     }
  14.    
  15.     public int get(int key) {
  16.         int result = -1;
  17.         Node node = nodeMap.get(key);
  18.         if(node != null) {
  19.             result = node.val;
  20.             remove(node);
  21.             add(node);
  22.         }
  23.  
  24.         return result;
  25.     }
  26.    
  27.     public void put(int key, int value) {
  28.         Node node = nodeMap.get(key);
  29.         if(node != null) {
  30.             remove(node);
  31.             node.val = value;
  32.             add(node);
  33.         } else {
  34.             if(nodeMap.size() == capacity) {
  35.                 nodeMap.remove(tail.prev.key);
  36.                 remove(tail.prev);
  37.             }
  38.  
  39.             Node newNode = new Node();
  40.             newNode.key = key;
  41.             newNode.val = value;
  42.             nodeMap.put(key, newNode);
  43.             add(newNode);
  44.         }
  45.     }
  46.  
  47.     private void add(Node node) {
  48.         Node headNext = head.next;
  49.         node.next = headNext;
  50.         headNext.prev = node;
  51.         head.next = node;
  52.         node.prev = head;
  53.     }
  54.  
  55.     private void remove(Node node) {
  56.         Node nextNode = node.next;
  57.         Node prevNode = node.prev;
  58.  
  59.         prevNode.next = nextNode;
  60.         nextNode.prev = prevNode;
  61.     }
  62.  
  63.     /**
  64.         Doubly Linked List implementation
  65.      */
  66.     class Node {
  67.         int key;
  68.         int val;
  69.         Node next;
  70.         Node prev;
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement