任务描述
思路
O(1)的查找—> 哈希表
O(1)找到最少使用并删除—>双链表
实现代码
class ListNode:
def __init__(self,key=None,val=None,next=None,prev=None):
self.val = val
self.key = key
self.next = next
self.prev = prev
class LRUCache:
def __init__(self, capacity: int):
self.map ={}
self.capacity = capacity
self.size = 0
self.head = ListNode()
self.tail = ListNode()
self.head.next = self.tail
self.tail.prev = self.head
def move2top(self,key):
node = self.map[key]
node.prev.next = node.next
node.next.prev = node.prev
node.next = self.head.next
node.prev = self.head
self.head.next = node
node.next.prev = node
def get(self, key: int) -> int:
if key in self.map.keys():
self.move2top(key)
return self.map[key].val
return -1
def put(self, key: int, value: int) -> None:
if key in self.map.keys():
self.map[key].val = value
self.move2top(key)
return
if self.size == self.capacity:
trash = self.tail.prev
self.map.pop(trash.key)
self.tail.prev = trash.prev
trash.prev.next = self.tail
self.size =self.size -1
self.size = self.size+1
node = ListNode(key,value,self.head.next,self.head)
node.prev.next = node
node.next.prev = node
self.map[key] = node