3
def __init__(self, key, val, cnt=1, nxxt=None, prev=None):14
self.head = Node(0, 0)15
self.tail = Node(0, 0)16
self.head.nxxt = self.tail17
self.tail.prev = self.head20
def addFront(self, node):29
def removeNode(self, node):32
delprev.nxxt = delnxxt33
delnxxt.prev = delprev38
class LFUCache(NodeList):40
def __init__(self, capacity: int):42
self.freqNodeList = {}43
self.maxSizeCache = capacity47
def updateFreqNodeList(self, node):48
del self.keyNode[node.key]49
nodelist = self.freqNodeList[node.cnt]50
nodelist.removeNode(node)52
if node.cnt == self.minFreq and self.freqNodeList[node.cnt].size == 0:55
if (node.cnt + 1) in self.freqNodeList:56
nextHigherFreqNodeList = self.freqNodeList[node.cnt + 1]58
nextHigherFreqNodeList = NodeList()61
nextHigherFreqNodeList.addFront(node)63
self.freqNodeList[node.cnt] = nextHigherFreqNodeList64
self.keyNode[node.key] = node66
def get(self, key: int) -> int:67
if key in self.keyNode:68
node = self.keyNode[key]70
self.updateFreqNodeList(node)77
def put(self, key: int, value: int) -> None:78
if self.maxSizeCache == 0:81
if key in self.keyNode:82
node = self.keyNode[key]84
self.updateFreqNodeList(node)88
if self.currSize == self.maxSizeCache:89
nodelist = self.freqNodeList[self.minFreq]90
del self.keyNode[nodelist.tail.prev.key]91
nodelist.removeNode(nodelist.tail.prev)97
if self.minFreq in self.freqNodeList:98
nodelist = self.freqNodeList[self.minFreq]100
nodelist = NodeList()102
node = Node(key, value)103
nodelist.addFront(node)105
self.keyNode[key] = node106
self.freqNodeList[self.minFreq] = nodelist109
# Your LFUCache object will be instantiated and called as such:110
# obj = LFUCache(capacity)111
# param_1 = obj.get(key)