微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LRUCache 设计

如何解决LRUCache 设计

这个问题与构建 LRUCache 所涉及的设计有关。可以找到完整的问题 here。尽管由于添加删除和查找键值对的最佳时间复杂度,该解决方案最终使用了双向链表,但我想知道我们是否可以使用数组来做同样的事情?

考虑其他数据结构(例如堆、二叉搜索树、堆)会很有帮助。有人可以提供他们的想法吗?

解决方法

对于LRUCache,基本操作包括:

  1. 获取一个键的值,并将其标记为最近使用的键
  2. 更新现有的(键,值)对
  3. 将新键及其值添加到缓存中,如果容量不足,可能会驱逐最近最少使用的键

一种常见的解决方案是使用双向链表来维护key的使用状态(向尾部移动1个元素,向尾部添加1个元素,从头部移除1个元素都需要O(1)),同时使用hashmap (key,list element 的指针) 来查询和更新key (get,set 需要O(1)).

如果用数组替换双向链表,将 1 个元素移动到尾部将花费 O(n)。 如果用堆或二分搜索树替换双向链表,从头部移除 1 个元素将总是需要 O(log(n))。所以它们不是双向链表的良好替代品。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。