• 146.LRU缓存--hash-双链表


    1. # 初始化双向链表
    2. class ListNode:
    3. def __init__(self,key=None,value=None):
    4. self.key=key
    5. self.value=value
    6. self.prev=None
    7. self.next=None
    8. class LRUCache:
    9. def __init__(self, capacity: int):
    10. # 初始化capacity hashmap
    11. self.capacity=capacity
    12. self.hashmap={}
    13. # 建立保护节点
    14. self.head=ListNode()
    15. self.tail=ListNode()
    16. # 初始化列表head<->tail
    17. self.head.next=self.tail
    18. self.tail.prev=self.head
    19. # 删除操作
    20. def Pop_node(self, node):
    21. node.prev.next = node.next
    22. node.next.prev=node.prev
    23. # 头插操作
    24. def Insert_head(self,key,value):
    25. # 新建节点
    26. node=ListNode()
    27. node.value=value
    28. node.key=key
    29. # 头插
    30. node.next=self.head.next
    31. self.head.next.prev=node
    32. self.head.next=node
    33. node.prev=self.head
    34. return node
    35. def get(self, key: int) -> int:
    36. # 如果存在列表中,就删除并移到头部,不存在返回-1
    37. if key not in self.hashmap:
    38. return -1
    39. # 找到结点
    40. node= self.hashmap[key]
    41. # 删除节点
    42. self.Pop_node(node)
    43. # 移到头部
    44. self.Insert_head(node.key,node.value)
    45. return node.value
    46. def put(self, key: int, value: int) -> None:
    47. # 如果在列表中:删除并移到头部
    48. if key in self.hashmap:
    49. # 先找到
    50. node=hashmap[key]
    51. self.Pop_node(node)
    52. self.Insert_head(node.key,node.value)
    53. else:
    54. # 如果不在列表中:新节点添加到头部
    55. node=self.Insert_head(key,value)
    56. # 建立映射关系
    57. self.hashmap[key] = node
    58. # 如果空间满了,删除尾部
    59. if len(self.hashmap)>self.capacity:
    60. self.Pop_node(self.tail.prev)
    61. # Your LRUCache object will be instantiated and called as such:
    62. # obj = LRUCache(capacity)
    63. # param_1 = obj.get(key)
    64. # obj.put(key,value)

  • 相关阅读:
    Dubbo之服务分组、分组聚合。
    MySQL 中的反斜杠 \\,我上当了
    Vue 常见通信
    跨级通信 Provide & Inject
    二叉树练习题(2024/6/5)
    辅音和声母的区别?(声母与辅音的区别)
    全国青少年软件编程等级考试标准(正式级)
    微信小程序2022年发展方向曝光
    零基础学Java(12)静态字段与静态方法
    NewStarCTF2023week4-More Fast(GC回收)
  • 原文地址:https://blog.csdn.net/weixin_74711824/article/details/134431309