leetcode_146
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and put.
get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1. put(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
The cache is initialized with a positive capacity.
Follow up:
Could you do both operations in O(1) time complexity?
Example:
LRUCache cache = new LRUCache( 2 /* capacity */ );
cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // returns 1
cache.put(3, 3); // evicts key 2
cache.get(2); // returns -1 (not found)
cache.put(4, 4); // evicts key 1
cache.get(1); // returns -1 (not found)
cache.get(3); // returns 3
cache.get(4); // returns 4Solutions
double linked list with hashmap
borrowed from others.
Use hash map to get/set item in
O(1)time.Use double linked list to retain the latest used item in the front and the least used item in the back to evict the leaset used item in
O(1)time.remove an item in double linked list with it's reference is
O(1)complexity. (Use map to keep the reference).Thus we need another map to save iterators of each item in double linked list.
Or save key-value pair in double linked list and store each node's iterator in a hashmap.
Or use self-made double linked list.
Or use builtin object that combined these two data structures in python.
Last updated
Was this helpful?