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

多域名网站大数据在营销中的应用案例

多域名网站,大数据在营销中的应用案例,微商城网站开发,亚马逊做网站发礼物换评价LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中#xff0c;则返回关键字的值#xff0c;否…LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类 LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中则返回关键字的值否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在则变更其数据值 value 如果不存在则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity 则应该 逐出 最久未使用的关键字。 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。 示例 输入 [LRUCache, put, put, get, put, get, put, get, get, get] [[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]] 输出 [null, null, null, 1, null, -1, null, -1, 3, 4]解释 LRUCache lRUCache new LRUCache(2); lRUCache.put(1, 1); // 缓存是 {11} lRUCache.put(2, 2); // 缓存是 {11, 22} lRUCache.get(1); // 返回 1 lRUCache.put(3, 3); // 该操作会使得关键字 2 作废缓存是 {11, 33} lRUCache.get(2); // 返回 -1 (未找到) lRUCache.put(4, 4); // 该操作会使得关键字 1 作废缓存是 {44, 33} lRUCache.get(1); // 返回 -1 (未找到) lRUCache.get(3); // 返回 3 lRUCache.get(4); // 返回 4题解 ​ 常做常新的一道题其实有点偏向于模板题目了没有做过上来直接写会很抓瞎有一些常见的问题 为什么用双向链表而不是单向链表 将某个节点移动到链表头部或者将链表尾部节点删去都要用到删除链表中某个节点这个操作。你想要删除链表中的某个节点需要找到该节点的前驱节点和后继节点。对于寻找后继节点单向链表和双向链表都能通过 next 指针在O(1)时间内完成对于寻找前驱节点单向链表需要从头开始找也就是要O(n)时间双向链表可以通过前向指针直接找到需要O(1)时间。综上要想在O(1)时间内完成该操作当然需要双向链表实际上就是用双向链表空间换时间了。为什么链表节点需要同时存储 key 和 value而不是仅仅只存储 value 因为删去最近最少使用的键值对时要删除链表的尾节点如果节点中没有存储 key那么怎么知道是哪个 key 被删除进而在 map 中删去该 key 对应的 key-value 呢 一定要多做几遍 type LRUCache struct {size, capacity intcache map[int]*Nodehead, tail *Node }type Node struct {value, key intprev, next *Node }func Constructor(capacity int) LRUCache {head : Node{}tail : Node{}head.next tailtail.prev headreturn LRUCache{capacity: capacity,cache: make(map[int]*Node),head: head,tail: tail,} }func (this *LRUCache) Get(key int) int {// 查询关键字 key 存在于缓存中返回关键字的值不存在则返回 -1if node, exist : this.cache[key]; exist {this.moveToHead(node)return node.value}return -1 }func (this *LRUCache) Put(key int, value int) {// 如果关键字 key 已经存在则变更其数据值 value // 如果不存在则向缓存中插入该组 key-value 。// 如果插入操作导致关键字数量超过 capacity 则逐出最久未使用的关键字if node, exist : this.cache[key]; exist {node.value valuethis.moveToHead(node)} else {newNode : Node{key: key, value: value}this.cache[key] newNodethis.addToHead(newNode)this.sizeif this.size this.capacity {tail : this.removeTail()delete(this.cache, tail.key)this.size--}} }// Put 操作元素如果不存在向缓存中添加 func (this *LRUCache) addToHead(node *Node) {node.prev this.headnode.next this.head.nextthis.head.next.prev nodethis.head.next node }// 本来在队列中的元素最近访问Get, Put后移动到队首 func (this *LRUCache) moveToHead(node *Node) {this.removeNode(node)this.addToHead(node) }// Put 操作插入超出容量则移除节点 func (this *LRUCache) removeNode(node *Node) {node.prev.next node.nextnode.next.prev node.prev }// 移除最近最久未使用的节点 func (this *LRUCache) removeTail() *Node {node : this.tail.prevthis.removeNode(node)return node }/*** Your LRUCache object will be instantiated and called as such:* obj : Constructor(capacity);* param_1 : obj.Get(key);* obj.Put(key,value);*/
http://www.hkea.cn/news/14260389/

相关文章:

  • 建设项目验收网站天津手机版建站系统价格
  • 菏泽网站建设做一晚水泥工歌曲网站
  • 上海网站建设中小型企业公司网站备案名称
  • 高性能网站建设进阶指南北京外包seo公司
  • 网站底部备案图标做网站需要后台吗
  • 宠物用品技术支持 东莞网站建设凡建网站
  • 国外做论坛网站网站建设意义
  • 网站做接口需要哪些茶网站开发方案
  • 免费网站入口2021牡丹江做网站
  • 商业网站制作教程开发网站需要多少资金
  • 花万元请人做网站旅游网页设计模板源代码
  • 建设营销网站要什么百度软件开放平台
  • 上海网站关键词高端定制品牌
  • 怎么让网站被百度搜到网站备案周期
  • 医院网站需要前置审批柳州企业网站开发平台
  • 小学学校网站网站备案更改需要多久
  • 杭州市做网站深圳商城软件开发
  • 网站推广服务chuseo四川成都百度推广
  • 网站空间查询中企动力做的网站后台如何登陆
  • 网站建设就业前景软件工程公司有哪些
  • 北京远程时代网站建设曲靖企业网站
  • 广告公司网站制作想建书画网站怎么做的
  • 外网门户网站建设方案网站开发实用技术第二版答案
  • 网站建设工作半年通报室内设计有哪些网站
  • 盘锦市网站建设企业网站网站建设价格
  • 哪里有给网站做wordpress添加留言
  • 网站开发研究论文网站做优化需要多少钱
  • 最好的完全免费开源企业网站wordpress创建配置文件
  • 如何选择百度网站优化公司网页设计需要学什么技术
  • 义乌网站建设制作wordpress后台改成中文