146. LRU Cache ๐
Last updated
Was this helpful?
Last updated
Was this helpful?
Difficulty: Medium
- Tags: Design
, Linked List
, Hash Table
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
and put
must run in O(1) average time complexity.
๐น Example 1:
Input:
Output:
Explanation:
1 <= capacity <= 3000
0 <= key <= 10โด
0 <= value <= 10โต
At most 2 * 10โต
calls will be made to get
and put
.
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).
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.
O(1) for both get
and put
operations.
O(n) for storing n
key-value pairs in the HashMap and Doubly Linked List.
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 .