难度:中等

由于周日没做,今天又是困难题,所以假装今天是周日
思路:
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.dic = {-1:[-1,-1,-2], -2:[-2,-1,-2]}
def get(self, key: int) -> int:
t = self.dic.get(key)
if t is None:
return -1
if t[2] != -2:
self.dic[t[2]][1] = t[1]
self.dic[t[1]][2] = t[2]
self.dic[key][1] = self.dic[-2][1]
self.dic[key][2] = -2
self.dic[self.dic[-2][1]][2] = key
self.dic[-2][1] = key
return t[0]
def put(self, key: int, value: int) -> None:
t = self.dic.get(key)
if t is None:
if self.capacity > 0:
self.capacity -= 1
else:
d = self.dic[-1][2]
self.dic[-1][2] = self.dic[d][2]
self.dic[self.dic[d][2]][1] = -1
self.dic.pop(d)
self.dic[key] = [value, self.dic[-2][1], -2]
self.dic[self.dic[-2][1]][2] = key
self.dic[-2][1] = key
return
self.dic[key][0] = value
self.get(key)