|
发表于 2024-10-29 15:59:36
|
显示全部楼层
你的代码有几个问题,我帮你指出来:
1. **`move_to_tail`方法的问题:**
- node = self.hashmap # 应该是 `node = self.hashmap[key]`, 缺少[key]
复制代码
2. **`get`方法的问题:**
- return self.hashmap.value # 应该是 `return self.hashmap[key].value`
复制代码
3. **`put`方法的问题:**
- 更新`hashmap`时,应该是`self.hashmap[key] = new`而不是`self.hashmap = new`。
- 如果达到最大容量时删除节点,不仅要更新链表,还要确保在`hashmap`中删除对应的`key`。
下面是修改后的代码:
- class ListNode:
- def __init__(self, key=None, value=None):
- self.key = key
- self.value = value
- self.next = None
- self.pre = None
- class LRUCache:
- def __init__(self, capacity: int):
- self.capacity = capacity
- self.hashmap = {}
- self.head = ListNode()
- self.tail = ListNode()
-
- self.head.next = self.tail
- self.tail.pre = self.head
- def move_to_tail(self, key: int):
- node = self.hashmap[key]
- node.pre.next = node.next
- node.next.pre = node.pre
- node.pre = self.tail.pre
- node.next = self.tail
- self.tail.pre.next = node
- self.tail.pre = node
- def get(self, key: int) -> int:
- if key in self.hashmap:
- self.move_to_tail(key)
- return self.hashmap[key].value
- else:
- return -1
- def put(self, key: int, value: int) -> None:
- if key in self.hashmap:
- self.hashmap[key].value = value
- self.move_to_tail(key)
- else:
- if len(self.hashmap) == self.capacity:
- # Remove the least recently used node
- lru = self.head.next
- del self.hashmap[lru.key]
- self.head.next = lru.next
- lru.next.pre = self.head
- # Add new node
- new = ListNode(key, value)
- self.hashmap[key] = new
- new.pre = self.tail.pre
- new.next = self.tail
- self.tail.pre.next = new
- self.tail.pre = new
复制代码
这个版本的代码修复了之前的错误,并实现了LRU缓存的功能。希望这能帮助到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|