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
get
andput
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 toget
andput
.
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
get
andput
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