Skip to content

Commit 80670ec

Browse files
committed
lru cache update
1 parent 4e8b576 commit 80670ec

1 file changed

Lines changed: 18 additions & 31 deletions

File tree

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
class Node:
2-
def __init__(self, key, value):
3-
self.key = key
4-
self.value = value
5-
self.previous = None
6-
self.next = None
7-
1+
from collections import OrderedDict
82

93
class LruCache:
104
def __init__(self, limit):
115
if limit <= 0:
126
raise ValueError("Limit must be positive")
137

148
self.limit = limit
9+
<<<<<<< HEAD
1510
self.cache = {} # key -> node
1611
self.head = None # Most recently used
1712
self.tail = None # Least recently used
@@ -48,35 +43,27 @@ def _add_to_head(self, node):
4843
# ---------------------
4944
# Public API
5045
# ---------------------
46+
=======
47+
self.cache = OrderedDict()
48+
>>>>>>> fc65c37 (lru cache update)
5149

5250
def get(self, key):
53-
node = self.cache.get(key)
54-
if not node:
51+
if key not in self.cache:
5552
return None
5653

57-
# Move to head (recently used)
58-
self._remove_node(node)
59-
self._add_to_head(node)
60-
61-
return node.value
54+
# Move key to the end (most recently used)
55+
value = self.cache.pop(key)
56+
self.cache[key] = value
57+
return value
6258

6359
def set(self, key, value):
64-
node = self.cache.get(key)
65-
66-
if node:
67-
# Update value and move to head
68-
node.value = value
69-
self._remove_node(node)
70-
self._add_to_head(node)
71-
return
60+
if key in self.cache:
61+
# Update existing and move to end
62+
self.cache.pop(key)
7263

73-
# If full, evict LRU (tail)
74-
if len(self.cache) >= self.limit:
75-
lru = self.tail
76-
self._remove_node(lru)
77-
del self.cache[lru.key]
64+
elif len(self.cache) >= self.limit:
65+
# Remove least recently used (first item)
66+
self.cache.popitem(last=False)
7867

79-
# Insert new node
80-
new_node = Node(key, value)
81-
self._add_to_head(new_node)
82-
self.cache[key] = new_node
68+
# Insert as most recently used
69+
self.cache[key] = value

0 commit comments

Comments
 (0)