File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed
Sprint-2/implement_lru_cache Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 1+ class Node :
2+ def __init__ (self , key , value ):
3+ self .key = key
4+ self .value = value
5+ self .prev = None
6+ self .next = None
7+
8+
9+ class LruCache :
10+ def __init__ (self , limit ):
11+ if limit <= 0 :
12+ raise ValueError ("Capacity must be greater than 0" )
13+ self .capacity = limit
14+ self .cache = {}
15+
16+ self .head = Node (None , None )
17+ self .tail = Node (None , None )
18+
19+ self .head .next = self .tail
20+ self .tail .prev = self .head
21+
22+ def _remove (self , node ):
23+ prev_node = node .prev
24+ next_node = node .next
25+ prev_node .next = next_node
26+ next_node .prev = prev_node
27+
28+ def _add_to_front (self , node ):
29+ node .prev = self .head
30+ node .next = self .head .next
31+ self .head .next .prev = node
32+ self .head .next = node
33+
34+ def get (self , key ):
35+ if key not in self .cache :
36+ return None
37+
38+ node = self .cache [key ]
39+ self ._remove (node )
40+ self ._add_to_front (node )
41+ return node .value
42+
43+ def set (self , key , value ):
44+ if key in self .cache :
45+ node = self .cache [key ]
46+ node .value = value
47+ self ._remove (node )
48+ self ._add_to_front (node )
49+ else :
50+ new_node = Node (key , value )
51+ self .cache [key ] = new_node
52+ self ._add_to_front (new_node )
53+
54+ if len (self .cache ) > self .capacity :
55+ lru = self .tail .prev
56+ self ._remove (lru )
57+ del self .cache [lru .key ]
You can’t perform that action at this time.
0 commit comments