当前位置:   article > 正文

Golang实现LRU Cache_golang lrucache

golang lrucache

146. LRU Cache

运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:

LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存

int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。

void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?

 

  1. package leetcode
  2. type node struct {
  3. key,val int
  4. prev, next *node
  5. }
  6. type linkedLRUCache struct {
  7. capacity int
  8. head,tail *node
  9. cache map[int]*node
  10. }
  11. func LRUCache(capacity int) LRU {
  12. return &linkedLRUCache{capacity:capacity,cache:make(map[int]*node)}
  13. }
  14. type LRU interface {
  15. Get(key int) int
  16. Put(key, value int)
  17. }
  18. func (c *linkedLRUCache) Get(key int) int {
  19. if node,ok := c.cache[key]; ok {
  20. c.remove(node)
  21. c.add(node)
  22. return node.val
  23. }
  24. return -1
  25. }
  26. func (c *linkedLRUCache) Put(key, val int) {
  27. if n,ok := c.cache[key]; ok {
  28. c.remove(n)
  29. n.val = val
  30. c.add(n)
  31. return
  32. }else {
  33. n = &node{key: key,val:val}
  34. c.cache[key] = n
  35. c.add(n)
  36. }
  37. if len(c.cache) > c.capacity {
  38. delete(c.cache,c.tail.key)
  39. c.remove(c.tail)
  40. }
  41. }
  42. //add node to head
  43. func (c *linkedLRUCache) add(n *node) {
  44. if c.head != nil {
  45. c.head.prev = n
  46. n.next = c.head
  47. }
  48. c.head = n
  49. if c.tail == nil {
  50. c.tail = n
  51. c.tail.prev = n
  52. c.tail.next = nil
  53. }
  54. }
  55. //remove node
  56. func (c *linkedLRUCache) remove(n *node) {
  57. //remove head node
  58. if c.head == n {
  59. if n.next != nil {
  60. n.next.prev = nil
  61. }
  62. c.head = n.next
  63. return
  64. }
  65. //remove tail node
  66. if c.tail == n {
  67. c.tail = c.tail.prev
  68. return
  69. }
  70. n.prev.next = n.next
  71. n.next.prev = n.prev
  72. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/950782
推荐阅读
相关标签
  

闽ICP备14008679号