Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.
get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(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.
Python:
import collections
class LRUCache:
# @param capacity, an integer
def __init__(self, capacity):
self.dic = collections.OrderedDict()
self.size = capacity
# @return an integer
def get(self, key):
if key in self.dic:
v = self.dic.pop(key)
self.dic[key] = v
return v
else:
return -1
# @param key, an integer
# @param value, an integer
# @return nothing
def set(self, key, value):
if key in self.dic:
self.dic.pop(key)
self.dic[key] = value
elif len(self.dic) >= self.size:
self.dic.popitem(last = False)
self.dic[key] = value