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

濮阳微信网站建设服务品牌策划方案

濮阳微信网站建设,服务品牌策划方案,网络服务提供者不得为未满多少岁开展工作,wordpress动漫网站LFU 缓存【LC460】 请你为 最不经常使用#xff08;LFU#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中#xff0c;则获取键的值#x…LFU 缓存【LC460】 请你为 最不经常使用LFU缓存算法设计并实现数据结构。 实现 LFUCache 类 LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中则获取键的值否则返回 -1 。void put(int key, int value) - 如果键 key 已存在则变更其值如果键不存在请插入键值对。当缓存达到其容量 capacity 时则应该在插入新项之前移除最不经常使用的项。在此问题中当存在平局即两个或更多个键具有相同使用频率时应该去除 最近最久未使用 的键。 为了确定最不常使用的键可以为缓存中的每个键维护一个 使用计数器 。使用计数最小的键是最久未使用的键。 当一个键首次插入到缓存中时它的使用计数器被设置为 1 (由于 put 操作)。对缓存中的键执行 get 或 put 操作使用计数器的值将会递增。 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。 错误答案 class LFUCache {// 注意PriorityQueue要插入(删除)数据顺序会发生改变如果仅仅是修改已经稳定队列的值或内容而不进行插入或者删除那么这个顺序是不会变的。// 使用Node存储每个key对应的value以及该key的操作次数、最近操作时间// 小顶堆存储每个元素 以使用次数及最近使用时间降序排序int capacity;PriorityQueueNode pq;MapInteger, Node map;int time;public LFUCache(int capacity) {this.capacity capacity;this.pq new PriorityQueue((o1, o2) - o1.freq o2.freq ? o1.time - o2.time : o1.freq - o2.freq);this.map new HashMap();this.time 0;}public int get(int key) {if (!map.containsKey(key)) return -1;Node node map.get(key);node.freq 1;node.time time;return node.val;}public void put(int key, int value) {if (map.containsKey(key)){Node node map.get(key);node.val value;node.freq 1;node.time time;}else{Node node new Node(key, value, time, 1);if (pq.size() capacity){Node node1 pq.poll();map.remove(node1.key);}pq.add(node);map.put(key, node);}} } class Node{int key;int val;int time;int freq;public Node(){this.freq 0;}public Node(int key, int val, int time, int freq){this.key key;this.val val;this.time time;this.freq freq;} }/*** Your LFUCache object will be instantiated and called as such:* LFUCache obj new LFUCache(capacity);* int param_1 obj.get(key);* obj.put(key,value);*/思路 LFU和LRU不同之处 LRU移除元素时移除最近最久未使用的元素LFU移除元素时移除使用频率最少的最近最久未使用的元素 因此LFU实现可以仿照LRU使用哈希表记录每个频率下的节点相同频率下的各个节点以双向链表的形式组织 每次移除元素时移除频率最小的最久未使用的元素每操作一次元素需要修改节点频率至相应链表链表的首部存放最新操作的元素为了快速找到某个节点在链表中的位置可以使用哈希表存储每个key对应的节点为了快速找到最小频率维护一个int变量记录最小频率 实现 class LFUCache {private static class Node {int key, value, freq 1; // 新书只读了一次Node prev, next;Node(int key, int value) {this.key key;this.value value;}}private final int capacity;private final MapInteger, Node keyToNode new HashMap();private final MapInteger, Node freqToDummy new HashMap();private int minFreq;public LFUCache(int capacity) {this.capacity capacity;}public int get(int key) {Node node getNode(key);return node ! null ? node.value : -1;}public void put(int key, int value) {Node node getNode(key);if (node ! null) { // 有这本书node.value value; // 更新 valuereturn;}if (keyToNode.size() capacity) { // 书太多了Node dummy freqToDummy.get(minFreq);Node backNode dummy.prev; // 最左边那摞书的最下面的书keyToNode.remove(backNode.key);remove(backNode); // 移除if (dummy.prev dummy) { // 这摞书是空的freqToDummy.remove(minFreq); // 移除空链表}}node new Node(key, value); // 新书keyToNode.put(key, node);pushFront(1, node); // 放在「看过 1 次」的最上面minFreq 1;}private Node getNode(int key) {if (!keyToNode.containsKey(key)) { // 没有这本书return null;}Node node keyToNode.get(key); // 有这本书remove(node); // 把这本书抽出来Node dummy freqToDummy.get(node.freq);if (dummy.prev dummy) { // 抽出来后这摞书是空的freqToDummy.remove(node.freq); // 移除空链表if (minFreq node.freq) { // 这摞书是最左边的minFreq;}}pushFront(node.freq, node); // 放在右边这摞书的最上面return node;}// 创建一个新的双向链表private Node newList() {Node dummy new Node(0, 0); // 哨兵节点dummy.prev dummy;dummy.next dummy;return dummy;}// 在链表头添加一个节点把一本书放在最上面private void pushFront(int freq, Node x) {Node dummy freqToDummy.computeIfAbsent(freq, k - newList());x.prev dummy;x.next dummy.next;x.prev.next x;x.next.prev x;}// 删除一个节点抽出一本书private void remove(Node x) {x.prev.next x.next;x.next.prev x.prev;} }
http://www.w-s-a.com/news/497653/

相关文章:

  • 建网站需要的费用公司注册后怎么做网站
  • 宣传电脑的网站开发运动网站建设教程
  • 网站建设公司都会有哪些花销做网站公司商丘
  • 网站风格有哪些软件定制和开发
  • 公司网络维护具体做什么河南网站推广优化公司哪家好
  • 中学生制作的网站常平哪里有招计算机网站开发的
  • 原创网站模版苏州响应式网站建设
  • 做海报在哪个网站可以找素材网址申请注册方法
  • 网站建设分哪些类别别人做的网站不能用
  • 做网站网站会怎么样全国高校校园网站联盟建设
  • 整站下载器 做网站地图地产项目网站设计
  • 创意设计网站公司手机wap网站建设多少钱
  • 甘肃省第八建设集团公司网站seo高级优化方法
  • 精美的商城网站介绍最多人用的wordpress子主题
  • 检察门户网站建设情况俄外长抵达北京
  • 老电脑做网站服务器网站在线留言如何做
  • 南宁广告公司网站建设小程序源码破解
  • 沛县做网站xlec网站建设开发方式包括哪些方面
  • 山西网站建设 哪家好四川城乡和建设厅网站
  • 有瀑布流的网站小型商城网站
  • 百石网怎么做网站二次开发软件
  • 网站域名是什么东西制作网页哪家好
  • 合肥网站建设团队简述网站内容管理流程
  • 网站广告是内容营销吗wordpress增加背景图片
  • 网站建设技术jsp课程设计响应式布局网站开发
  • 东莞网站排名优化seo套路网站怎么做的
  • 我做网站网络建站一般多少钱
  • 如何快速提升网站关键词排名房地产网站开发毕业设计
  • 做网站 提交源码 论坛sem分析是什么意思
  • 网站建设与部署阿里云大学百度付费推广有几种方式