146. LRU Cache 🔗

Difficulty: Medium - Tags: Design, Linked List, Hash Table

LeetCode Problem Link


Problem Statement 📜

Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.

Implement the LRUCache class:

  1. LRUCache(int capacity): Initialize the LRU cache with positive size capacity.

  2. int get(int key): Return the value of the key if the key exists, otherwise return -1.

  3. void put(int key, int value):

    • Update the value of the key if it exists.

    • Add the key-value pair if the key does not exist.

    • If the number of keys exceeds the capacity, evict the least recently used key.

Constraints:

  • The functions get and put must run in O(1) average time complexity.


Examples 🌟

🔹 Example 1:

Input:

Output:

Explanation:


Constraints ⚙️

  • 1 <= capacity <= 3000

  • 0 <= key <= 10⁴

  • 0 <= value <= 10⁵

  • At most 2 * 10⁵ calls will be made to get and put.


Solution 💡

Use a combination of:

  1. HashMap: For O(1) access to key-value pairs.

  2. Doubly Linked List: For maintaining the order of usage (most recently used to least recently used).


Java Solution


Explanation of the Solution

  1. Node Definition:

    • Each node stores a key-value pair.

    • Nodes are linked in both directions to allow quick removal.

  2. HashMap:

    • Maps keys to nodes for O(1) access.

  3. Doubly Linked List:

    • The head points to the most recently used node.

    • The tail points to the least recently used node.

  4. Operations:

    • get: Move the node to the head of the list.

    • put: Add the node to the head. If the cache exceeds capacity, remove the node at the tail.


Time Complexity ⏳

  • O(1) for both get and put operations.

Space Complexity 💾

  • O(n) for storing n key-value pairs in the HashMap and Doubly Linked List.


Follow-up 🧐

The solution is optimized for LRU Cache implementation with constant time complexity and minimal space usage. Further optimizations could involve concurrent data structures for multi-threaded environments.

You can find the full solution here.

Last updated

Was this helpful?