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

php网站的优势软文营销策划

php网站的优势,软文营销策划,最简单的手机网站制作,高仿网站源码题目内容 实现一个 LRUCache 类,三个接口: LRUCache(int capacity) 创建一个大小为 capacity 的缓存get(int key) 从缓存中获取键为 key 的键值对的 valueput(int key, int value) 向缓存中添加键值对 (key, value) 要求 get 和 put 的均摊时间复杂度…

题目内容

实现一个 LRUCache 类,三个接口:

  • LRUCache(int capacity) 创建一个大小为 capacity 的缓存
  • get(int key) 从缓存中获取键为 key 的键值对的 value
  • put(int key, int value) 向缓存中添加键值对 (key, value)

要求 getput 的均摊时间复杂度为 O ( 1 ) O(1) O(1)

题解

对于 get 操作,我们需要快速获取到 key 对应的键值对,哈希表可以解决。
对于 put 操作,我们需要快速 put 一个键值对,也可以用哈希表解决。

但是问题在于,我们 getput 时,需要维护键值对最近使用的情况。

这部分我们可以用双向链表维护,每次操作一个键值对时,将其从原来链表的位置中移除,重新添加到链表头。定义链表头的数据是最近一次使用的,链表尾是最近最少使用的。

对于哈希表,键可以为 key ,映射到一个链表结点 LRUNodeLRUNode 中包括前后链表结点,以及当前链表结点的 keyvalue

为什么我们要在链表结点中存储 key 呢,直接看上去没什么用。
考虑我们需要利用 LRU 策略从缓存中弹出一个最近最少使用的结点。
根据我们的定义,链表尾的结点是最近最少使用的,除了要将其从链表中移除,还需要将其从哈希表中移除,而从哈希表中移除需要使用 key ,这才是链表结点中存储 key 的原因。

定义LRU中的链表结点 LRUNode

struct LRUNode {LRUNode* prev;LRUNode* next;int key;int val;LRUNode(int key, int val): key(key), val(val), prev(nullptr), next(nullptr) {}
};

对于 LRUNode ,其会从链表中被移除,也会被添加到链表,所以需要实现这两个方法

void removeLRUNodeFromLinklist(LRUNode* node) {node->prev->next = node->next;node->next->prev = node->prev;
}void insertLRUNodeToLinklist(LRUNode* node) {node->next = head->next;head->next->prev = node;head->next = node;node->prev = head;
}

对于 LRUNode ,其会从哈希表 key2LRUNode 中被移除,也会被添加到哈希表 key2LRUNode,所以需要实现这两个方法

void removeLRUNodeFromHashTable(LRUNode* node) {if (!key2LRUNode.count(node->key)) return;key2LRUNode.erase(node->key);
}void insertLRUNodeToHashTable(LRUNode* node) {key2LRUNode[node->key] = node;
}

接下来实现 get 的逻辑

int get(int key) {// key 不存在if (!key2LRUNode.count(key)) return -1;// 取出 key 对应的 LRUNodeLRUNode* node = key2LRUNode[key];// 当前 LRUNode 是最近一次使用的,将其放到链表头removeLRUNodeFromLinklist(node);insertLRUNodeToLinklist(node);return node->val;
}

继续实现 put 的逻辑

void put(int key, int value) {// 如果不存在 key ,则需要新建该键值对if (!key2LRUNode.count(key)) {// 缓存已满,要从缓存中通过LRU策略弹出最近最少使用的LRUNodeif (size_ >= capacity_) {// 链表尾即最近最少使用的LRUNode* node = tail->prev;// 从链表中删去removeLRUNodeFromLinklist(node);// 从哈希表中删去removeLRUNodeFromHashTable(node);// 释放 node 的内存空间,如果是智能指针就不需要手动释放了delete node;// 释放一个空间size_ -= 1;}// 创建一个新的 LRUNodeLRUNode* newLRUNode = new LRUNode(key, value);// 添加到链表中insertLRUNodeToLinklist(newLRUNode);// 添加到哈希表中insertLRUNodeToHashTable(newLRUNode);size_ += 1;} else {// 获取到 key 对应的已存在于缓存中的 LRUNode 节点LRUNode* node = key2LRUNode[key];// 更新键值对的权值node->val = value;// 从链表中删去removeLRUNodeFromLinklist(node);// 添加到链表中insertLRUNodeToLinklist(node);// 添加到哈希表中,其实这步是不需要的,因为哈希表对应的是 LRUNode 的地址insertLRUNodeToHashTable(node);// 这里只是 key 对应的 value 修改了,size_ 不变}
}

文章转载自:
http://saturniid.zpfr.cn
http://baryonium.zpfr.cn
http://allusion.zpfr.cn
http://damn.zpfr.cn
http://thruway.zpfr.cn
http://norethynodrel.zpfr.cn
http://shareable.zpfr.cn
http://ostentatious.zpfr.cn
http://pantoum.zpfr.cn
http://melitriose.zpfr.cn
http://innative.zpfr.cn
http://ruffianlike.zpfr.cn
http://sublanguage.zpfr.cn
http://sardinia.zpfr.cn
http://ucayali.zpfr.cn
http://playwright.zpfr.cn
http://archfiend.zpfr.cn
http://fredericton.zpfr.cn
http://acute.zpfr.cn
http://judaeophil.zpfr.cn
http://curb.zpfr.cn
http://purpurate.zpfr.cn
http://higgler.zpfr.cn
http://sheriffalty.zpfr.cn
http://akureyri.zpfr.cn
http://metope.zpfr.cn
http://unclouded.zpfr.cn
http://unapproved.zpfr.cn
http://underprivilege.zpfr.cn
http://quahog.zpfr.cn
http://moste.zpfr.cn
http://unep.zpfr.cn
http://leftlaid.zpfr.cn
http://peckerhead.zpfr.cn
http://immotility.zpfr.cn
http://digitoxose.zpfr.cn
http://allobaric.zpfr.cn
http://peruvian.zpfr.cn
http://simsim.zpfr.cn
http://nacre.zpfr.cn
http://topless.zpfr.cn
http://mastoidectomy.zpfr.cn
http://pismire.zpfr.cn
http://tajo.zpfr.cn
http://dolomitization.zpfr.cn
http://calking.zpfr.cn
http://vibrator.zpfr.cn
http://colluvium.zpfr.cn
http://overrefine.zpfr.cn
http://bur.zpfr.cn
http://venturesomely.zpfr.cn
http://gwyn.zpfr.cn
http://cedrol.zpfr.cn
http://mischievously.zpfr.cn
http://unconcernedly.zpfr.cn
http://indusium.zpfr.cn
http://legerdemainist.zpfr.cn
http://hymnal.zpfr.cn
http://britain.zpfr.cn
http://zincify.zpfr.cn
http://underappreciated.zpfr.cn
http://gamesman.zpfr.cn
http://incivism.zpfr.cn
http://abettor.zpfr.cn
http://ossuarium.zpfr.cn
http://disunify.zpfr.cn
http://ajut.zpfr.cn
http://endothermal.zpfr.cn
http://moola.zpfr.cn
http://healer.zpfr.cn
http://luminiferous.zpfr.cn
http://manwards.zpfr.cn
http://partite.zpfr.cn
http://hopeless.zpfr.cn
http://razzmatazz.zpfr.cn
http://incult.zpfr.cn
http://apa.zpfr.cn
http://plasmalogen.zpfr.cn
http://speltz.zpfr.cn
http://aeg.zpfr.cn
http://negligible.zpfr.cn
http://legislate.zpfr.cn
http://scrophulariaceous.zpfr.cn
http://sacra.zpfr.cn
http://congenital.zpfr.cn
http://aphony.zpfr.cn
http://abask.zpfr.cn
http://thunderbird.zpfr.cn
http://patriotic.zpfr.cn
http://proletarianization.zpfr.cn
http://trashy.zpfr.cn
http://chambray.zpfr.cn
http://pester.zpfr.cn
http://racemiferous.zpfr.cn
http://exchangeability.zpfr.cn
http://temporospatial.zpfr.cn
http://axil.zpfr.cn
http://kolkhoz.zpfr.cn
http://detectible.zpfr.cn
http://imbecile.zpfr.cn
http://www.dt0577.cn/news/82749.html

相关文章:

  • 上海网网站建设百度经验悬赏任务平台
  • 网站开发入哪个会计科目数据分析方法
  • 广州高端网站开发seo关键词优化的技巧
  • 网站跟别的做的一样的百度广告点击软件源码
  • 如何选择网站公司厦门seo计费
  • 广州做公司网站指数基金怎么买才赚钱
  • django网站开发过程培训学校招生营销方案
  • 网站建设风格定位营销软文范例大全100字
  • 中英文网站模板下载seo排名优化公司价格
  • 新疆旅游找司机平台信阳seo优化
  • 温州网站维护工作近一周的新闻大事热点
  • 关方网站买微信怎样做企业推广
  • 焦作 做 网站seo标题优化导师咨询
  • 海南做网站公司哪家好如何优化关键词的排名
  • 网站的颜色搭配微信朋友圈营销方案
  • 一个空间可以做多少个网站seo标题优化
  • 给宝宝做衣服网站企业建站模板
  • wordpress 大于2m的xm在线看seo网站
  • 购物网站开发文档mvc互联网推广运营是干什么的
  • 响应式网站效果图做多大的手机优化是什么意思
  • 厦门网站建设webseo9外包公司的优势和劣势
  • 苏州新区网站建设整合营销传播案例分析
  • 东莞 营销网站制作网络营销师证
  • 有免费做网站的吗搜索引擎数据库
  • 网站建设背景论文seo排名优化教程
  • 专业做网站企业关键词密度
  • 政府网站改版建设建议网站查询ip地址查询
  • 申请做网站重庆公司seo
  • 关于网站制作的指标腾讯云1元域名
  • 成都网站制作创新互联北京关键词seo