146. LRU Cache 🔗
Difficulty: Medium - Tags: Design, Linked List, Hash Table
Problem Statement 📜
Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.
Implement the LRUCache class:
LRUCache(int capacity): Initialize the LRU cache with positive size capacity.int get(int key): Return the value of the key if the key exists, otherwise return-1.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
getandputmust run in O(1) average time complexity.
Examples 🌟
🔹 Example 1:
Input:
Output:
Explanation:
Constraints ⚙️
1 <= capacity <= 30000 <= key <= 10⁴0 <= value <= 10⁵At most
2 * 10⁵calls will be made togetandput.
Solution 💡
Use a combination of:
HashMap: For O(1) access to key-value pairs.
Doubly Linked List: For maintaining the order of usage (most recently used to least recently used).
Java Solution
Explanation of the Solution
Node Definition:
Each node stores a key-value pair.
Nodes are linked in both directions to allow quick removal.
HashMap:
Maps keys to nodes for O(1) access.
Doubly Linked List:
The head points to the most recently used node.
The tail points to the least recently used node.
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
getandputoperations.
Space Complexity 💾
O(n) for storing
nkey-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?