当前位置: 首页 > news >正文

写作网站起点全国seo公司排名

写作网站起点,全国seo公司排名,wordpress隐藏页面内容,广州建网站加备案相关题目 146. LRU 缓存 要让 put 和 get ⽅法的时间复杂度为 O(1),我们可以总结出 cache 这个数据结构必要的条件: 1、显然 cache 中的元素必须有时序,以区分最近使⽤的和久未使⽤的数据,当容量满了之后要删除最久未使⽤的那个元…

相关题目
146. LRU 缓存

要让 put 和 get ⽅法的时间复杂度为 O(1),我们可以总结出 cache 这个数据结构必要的条件:
1、显然 cache 中的元素必须有时序,以区分最近使⽤的和久未使⽤的数据,当容量满了之后要删除最久未使⽤的那个元素腾位置。
2、我们要在 cache 中快速找某个 key 是否已存在并得到对应的 val。
3、每次访问 cache 中的某个 key,需要将这个元素变为最近使⽤的,也就是说 cache 要⽀持在任意位置快速插⼊和删除元素。

哈希表查找快,但是数据⽆固定顺序;链表有顺序之分,插⼊删除快,但是查找慢,所以结合⼆者的⻓处,可以形成⼀种新的数据结构:哈希链表 LinkedHashMap

在Python中,可以使用collections模块中的OrderedDict类来实现类似于Java中LinkedHashMap的功能。

本文最后还提供了一种 结合双向链表和哈希表的 从零开始的实现,供参考。

// 使用 LinkedHashMap 实现
class LRUCache {int cap;LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>();public LRUCache(int capacity) {this.cap = capacity;}public int get(int key) {if (!cache.containsKey(key)) {return -1;}// 将 key 变为最近使⽤makeRecently(key);return cache.get(key);}public void put(int key, int val) {if (cache.containsKey(key)) {// 修改 key 的值cache.put(key, val);// 将 key 变为最近使⽤makeRecently(key);return;}if (cache.size() >= this.cap) {// 链表头部就是最久未使⽤的 keyint oldestKey = cache.keySet().iterator().next();cache.remove(oldestKey);}// 将新的 key 添加链表尾部cache.put(key, val);}private void makeRecently(int key) {int val = cache.get(key);// 删除 key,重新插⼊到队尾cache.remove(key);cache.put(key, val);}
}
# 使用 OrderedDict 实现
from collections import OrderedDictclass LRUCache:def __init__(self, capacity: int):self.cc = capacityself.d = OrderedDict()def get(self, key: int) -> int:if key in self.d:self.d.move_to_end(key)return self.d[key]return -1def put(self, key: int, value: int) -> None:if key in self.d:del self.d[key]self.d[key] = valueif len(self.d) > self.cc:self.d.popitem(last=False)
# 手撸LRU算法,结合双向链表和哈希表,LinkedHashMap
# 先定义双向链表节点
class DoubleListNodeLRU:next, last = None, Nonedef __init__(self, k, v):self.k = kself.v = vclass NodeLRU:head, tail = None, Nonesize = Nonedef __init__(self):# head tail 为 头尾虚拟节点self.head = DoubleListNodeLRU(0, 0)self.tail = DoubleListNodeLRU(0, 0)self.head.next = self.tailself.tail.last = self.headself.size = 0# 链表尾部添加节点 时间 O(1)def addLast(self, x: DoubleListNodeLRU):x.last = self.tail.lastx.next = self.tailself.tail.last.next = xself.tail.last = xself.size += 1# 删除链表中的 x 节点(x ⼀定存在)# 由于是双链表且给的是⽬标Node节点,时间O(1)def remove(self, x: DoubleListNodeLRU):x.last.next = x.nextx.next.last = x.lastself.size -= 1# 删除链表中第⼀个节点,并返回该节点,时间 O(1)def removeFirst(self):if self.head.next == self.tail:return Nonefirst = self.head.nextself.remove(first)return firstclass LRUCache:def __init__(self, capacity: int):self.cap = capacity# key -> node(key, val)self.map = dict()self.cache = NodeLRU()# 将某个 key 提升为最近使⽤的def makeRecently(self, k):node = self.map.get(k)self.cache.remove(node)self.cache.addLast(node)# 添加最近使⽤的元素def addRecently(self, k, v):node = DoubleListNodeLRU(k, v)self.cache.addLast(node)self.map[k] = node# 删除某⼀个 keydef deletekey(self, k):node = self.map[k]self.map.pop(k)self.cache.remove(node)def removeLeastRecently(self):deleteNode = self.cache.removeFirst()deletekey = deleteNode.kself.map.pop(deletekey)def get(self, k):if k not in self.map:return -1self.makeRecently(k)return self.map.get(k).vdef put(self, k, v):if k in self.map:self.deletekey(k)self.addRecently(k, v)returnif self.cache.size == self.cap:self.removeLeastRecently()self.addRecently(k, v)
http://www.ds6.com.cn/news/102890.html

相关文章:

  • 建材在哪些网站做在线培训平台有哪些
  • 网站如何做导航sem优化公司
  • 曼奇立德原画培训学费合肥seo推广公司哪家好
  • .com免费网站怎么做b2b免费发布信息平台
  • 班级网站 php百度seo还有前景吗
  • 建站系统和构建系统网络营销手段
  • 内江网站建设太原seo外包公司
  • 广东高职一流专业建设专题网站cps广告联盟网站
  • 展厅宣传片seo公司多少钱
  • wordpress load.php南京百度推广优化
  • 网站的工作简报怎么做sem是什么意思职业
  • 设计方案参考网站北京seo招聘网
  • 网站建设教程小说怎么做网站赚钱
  • 公司招聘一个网站建设来做推广一键制作单页网站
  • 白云区网站建设公司免费奖励自己的网站
  • 网站开发需求 模板百度热搜榜排名昨日
  • 如何进入网站后台地址百度宣传推广费用
  • 常州 网站 推广成都网站快速排名提升
  • 太原网站制作维护软文代写费用
  • 如何制作网站视频的软件seo优化推广多少钱
  • 开发电商平台多少钱北京网站优化站优化
  • 长春电商网站建设价格低郑州seo联系搜点网络效果好
  • 商城版免费网站制作优秀营销软文100篇
  • 龙华做棋牌网站建设哪家好seo的基础是什么
  • 一个网址的组成有哪些郑州seo外包顾问热狗
  • 专做奢侈品品牌的网站免费的网站推广方法
  • 做企业网站百度推广客服怎么打电话关键词快速排名不限行业
  • 南城网站建设流量平台
  • 微信网站开发哪家好百度竞价排名服务
  • 权威解读当前经济热点问题什么是seo?