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

昆明网站建设培训班怎么做网站注册系统

昆明网站建设培训班,怎么做网站注册系统,网络公司推广,云南人事考试网官网题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则…

题目

请你设计并实现一个满足  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); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1);    // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2);    // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1);    // 返回 -1 (未找到)
lRUCache.get(3);    // 返回 3
lRUCache.get(4);    // 返回 4

提示:

  • 1 <= capacity <= 3000
  • 0 <= key <= 10000
  • 0 <= value <= 10^5
  • 最多调用 2 * 10^5 次 get 和 put

解答

源代码

class LRUCache {// 设计一个双向链表节点class DLinkedNode {int key;int value;DLinkedNode pre;DLinkedNode next;public DLinkedNode() {};public DLinkedNode(int key, int value) {this.key = key;this.value = value;}}// 用哈希表作缓存private Map<Integer, DLinkedNode> cache = new HashMap<>();// size表示当前缓存占用空间private int size;// capacity表示缓存总空间private int capacity;// 伪头部和伪尾部节点private DLinkedNode head, tail;// 构造函数public LRUCache(int capacity) {this.size = 0;this.capacity = capacity;head = new DLinkedNode();tail = new DLinkedNode();head.next = tail;tail.pre = head;}public int get(int key) {DLinkedNode node = cache.get(key);// 如果key不存在,返回-1if (node == null) {return -1;}// 如果key存在,把对应节点移到头部,返回对应valuemoveTohead(node);return node.value;}public void put(int key, int value) {DLinkedNode node = cache.get(key);if (node == null) {// key不存在,创建一个新的节点DLinkedNode newNode = new DLinkedNode(key, value);// 添加进哈希表cache.put(key, newNode);// 添加至双向链表头部addToHead(newNode);// 缓存已用空间+1size++;// 判断缓存空间是否足够if (size > capacity) {DLinkedNode tail = removeTail();cache.remove(tail.key);size--;}} else {// key存在,则更新value,将对应节点移到头部node.value = value;moveTohead(node);}}public void moveTohead(DLinkedNode node) {node.pre.next = node.next;node.next.pre = node.pre;addToHead(node);}public void addToHead(DLinkedNode node) {node.pre = head;node.next = head.next;head.next = node;node.next.pre = node;}public DLinkedNode removeTail() {DLinkedNode res = tail.pre;tail.pre = res.pre;res.pre.next = tail;return res;}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

总结

以前没做过这种通过程序实现一个机制的,今天对着题解也算是写着感受了一遍是个什么流程,希望下次能试着自己写下来。

http://www.yayakq.cn/news/647897/

相关文章:

  • 域名拍卖网站百度上免费创建网站
  • 一流的上海网站建设公一般网站建设
  • 天猫交易网站厦门 网站制作
  • 个人免费网站如何做asp服装网站模板
  • 建设网站教程2016网站建设相关视频
  • 北京 公司网站 备案中 开通访问如何根据网址攻击网站
  • 怎样做代刷网站合购8登录WordPress
  • 21年没封直接可以进的上海网站制作优化公司
  • 门户网站建设先进性哈尔滨市香坊区建设局网站
  • 内容分享网站设计通辽网站制作公司
  • 盘锦做网站企业asp网站开发 知识
  • 如何策划一个网站系统开发软件
  • 购物网站建设优缺点那里有做网站
  • php wap网站实现滑动式数据分页百度爱采购下载app
  • 金融公司网站方案大学的一级或二级域名
  • 成都建站哪家好现在都用什么软件做网站
  • 南阳市做网站免费域名注册网
  • 岳阳汨罗网站建设低价网站建设方案
  • 网站如何做攻击防护企业seo自助建站系统
  • 找个公司做网站需要注意什么档案网站建设优秀代表
  • 怎么查有做网站的公司有哪些app 官方网站 案例
  • access数据库创建网站珠海北京网站建设
  • 徐州网站关键词推广yw55521can优物入口
  • 网站开发的技术手段有哪些临沂市住房和城乡建设局网站
  • 电脑系统网站建设扁平化中文网站模板下载
  • 做网站内存最小源码网络运营是干嘛的
  • 开普网站建设公司网页游戏排行榜前十推荐
  • 网络商城网站建设太原网站域名搭建
  • wordpress 站中站山东泰安房价
  • 理财网站建设方案书手游传奇发布网站999