Skip to content

Commit 9d089ad

Browse files
author
Partho Biswas
committed
no message
1 parent a9e12da commit 9d089ad

File tree

1 file changed

+11
-34
lines changed

1 file changed

+11
-34
lines changed

algoexpert.io/python/LRU_Cache.py

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
2-
31
class LRUCache:
42
def __init__(self, maxSize):
5-
self.cache = {}
63
self.maxSize = maxSize or 1
4+
self.cache = {}
75
self.currentSize = 0
86
self.listOfMostRecent = DoublyLinkedList()
97

10-
11-
# O(1) time | O(1) space
128
def insertKeyValuePair(self, key, value):
139
if key not in self.cache:
1410
if self.currentSize == self.maxSize:
@@ -20,45 +16,32 @@ def insertKeyValuePair(self, key, value):
2016
self.replaceKey(key, value)
2117
self.updateMostRecent(self.cache[key])
2218

23-
24-
# O(1) time | O(1) space
2519
def getValueFromKey(self, key):
2620
if key not in self.cache:
2721
return None
2822
self.updateMostRecent(self.cache[key])
2923
return self.cache[key].value
3024

31-
32-
# O(1) time | O(1) space
3325
def getMostRecentKey(self):
3426
return self.listOfMostRecent.head.key
3527

36-
3728
def evictLeastRecent(self):
3829
keyToRemove = self.listOfMostRecent.tail.key
3930
self.listOfMostRecent.removeTail()
4031
del self.cache[keyToRemove]
4132

42-
43-
def updateMostRecent(self, node):
44-
self.listOfMostRecent.setToHead(node)
45-
46-
4733
def replaceKey(self, key, value):
48-
if key not in self.cache:
49-
raise Exception("The provided key isn't in the cache!")
5034
self.cache[key].value = value
5135

52-
53-
36+
def updateMostRecent(self, listNode):
37+
self.listOfMostRecent.setHeadTo(listNode)
5438

5539
class DoublyLinkedList:
5640
def __init__(self):
5741
self.head = None
5842
self.tail = None
5943

60-
61-
def setToHead(self, node):
44+
def setHeadTo(self, node):
6245
if self.head == node:
6346
return
6447
elif self.head is None:
@@ -71,41 +54,35 @@ def setToHead(self, node):
7154
else:
7255
if self.tail == node:
7356
self.removeTail()
74-
node.removeBindings()
57+
node.removeBinding()
7558
self.head.prev = node
7659
node.next = self.head
7760
self.head = node
7861

79-
8062
def removeTail(self):
8163
if self.tail is None:
8264
return
83-
if self.tail == self.head:
65+
if self.head == self.tail:
8466
self.head = None
8567
self.tail = None
8668
return
8769
self.tail = self.tail.prev
8870
self.tail.next = None
8971

90-
9172
class DoublyLinkedListNode:
92-
def __init__(self, key, value):
73+
def __init__(self, key, val):
9374
self.key = key
94-
self.value = value
95-
self.prev = None
75+
self.value = val
9676
self.next = None
77+
self.prev = None
9778

98-
99-
def removeBindings(self):
79+
def removeBinding(self):
10080
if self.prev is not None:
10181
self.prev.next = self.next
10282
if self.next is not None:
10383
self.next.prev = self.prev
104-
self.prev = None
10584
self.next = None
106-
107-
108-
85+
self.prev = None
10986

11087

11188

0 commit comments

Comments
 (0)