We use cookies for site analytics. Accept to help us understand how the site is used. See our Privacy Policy for details.
A hard design problem, graded against 5 test cases (2 of them hidden).
Build a working data structure to an API - LRU caches, rate limiters, and iterators.
Reach for it when you see: "Design a class supporting these operations in O(1)" - an API rather than a single function.
More Designproblems →The hash map gives us O(1) lookup of the node for any key. The doubly linked list lets us reorder in O(1) - moving a node to the head when it's accessed, and detaching the tail when we evict.
Use sentinel head/tail nodes to avoid null edge cases. Helpers:
- `addToHead(node)` - splice between head and head.next
- `remove(node)` - splice node out
- `moveToHead(node)` = remove + addToHead
- `popTail()` - returns the node before `tail`, then removes it
Common pitfalls:
- Forgetting to update the map on eviction.
- Forgetting to overwrite the value (and move to head) on a `put` for an existing key.
- A singly linked list won't work - removing an arbitrary node by reference is O(n).
The full reference solution in every supported language stays in the editor above - reveal it there once you have had a real attempt.
Read off this problem's own test suite, so these are the cases a submission actually has to survive.
These apply to the pattern as a whole, not just this problem.