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

郑州市建设厅网站网络黄页网址

郑州市建设厅网站,网络黄页网址,如何自建网站做外贸,黄页网站是什么例题#xff1a; 分析#xff1a; 这道题可以用两个哈希表来实现#xff0c;一个hash表#xff08;kvMap#xff09;用来存储节点#xff0c;另一个hash表#xff08;freqMap#xff09;用来存储双向链表#xff0c;链表的头节点代表最近使用的元素#xff0c;离头节…例题 分析 这道题可以用两个哈希表来实现一个hash表kvMap用来存储节点另一个hash表freqMap用来存储双向链表链表的头节点代表最近使用的元素离头节点越远的节点代表最近最少使用的节点。 注意freqMap 的 key 为节点的使用频次。 下图是freqMap的结构 这是kvMap 它的key没有什么特殊含义value是储存的节点 题目中调用get方法会增加元素的使用次数freq这时在freqMap中需要将该节点转移到对应的位置上比如该节点使用了两次那就把该节点转移到key为2的位置上去 put方法分为两种情况如果要添加的key不存在说明是新元素放到key为1的位置上如果key存在此时是修改操作改变元素的value值对应的频次1同样放到对应的位置上。 淘汰策略要保证两个hash表中的节点数一致。 代码实现 package leetcode;import java.util.HashMap;//设计LFU缓存 public class LFUCacheLeetcode460 {static class LFUCache {static class Node{Node prev;Node next;int key;int value;int freq 1;public Node(){}public Node(int key, int value) {this.key key;this.value value;}}static class DoublyLinkedList{Node head;Node tail;int size;public DoublyLinkedList(){head tail new Node();head.next tail;tail.prev head;}//头部添加 head-1-2-tail 添加3public void addFirst(Node node){Node oldFirst head.next;oldFirst.prev node;head.next node;node.prev head;node.next oldFirst;size;}//指定节点删除 head-1-2-3-tail 删除2public void remove(Node node){Node prev node.prev;Node next node.next;prev.next next;next.prev prev;size--;}//删除最后一个节点public Node removeLast(){Node last tail.prev;remove(last);return last;}//判断双向链表是否为空public boolean isEmpty(){return size 0;}}private HashMapInteger,Node kvMap new HashMap();private HashMapInteger,DoublyLinkedList freqMap new HashMap();private int capacity;private int minFreq 1;public LFUCache(int capacity) {this.capacity capacity;}/** 获取节点 不存在返回 -1* 存在 增加节点的使用频次将其转移到频次1的链表中* 判断旧节点所在的链表是否为空更新最小频次minFreq* */public int get(int key) {if(!kvMap.containsKey(key)){return -1;}Node node kvMap.get(key);//先删除旧节点DoublyLinkedList list freqMap.get(node.freq);list.remove(node);//判断当前链表是否为空为空可能需要更新最小频次if(list.isEmpty() node.freq minFreq){minFreq;}node.freq;//将新节点放入新位置可能该频次对应的链表不存在不存在需要创建freqMap.computeIfAbsent(node.freq, k - new DoublyLinkedList()).addFirst(node);return node.value;}/** 更新* 将节点的value更新增加节点的使用频次将其转移到频次1的链表中* 新增* 检查是否超过容量若超过淘汰minFreq链表的最后节点* 创建新节点放入kvMap并加入频次为 1 的双向链表* */public void put(int key, int value) {if(kvMap.containsKey(key)){ //更新Node node kvMap.get(key);DoublyLinkedList list freqMap.get(node.freq);list.remove(node);if(list.isEmpty() node.freq minFreq){minFreq;}node.freq;freqMap.computeIfAbsent(node.freq, k - new DoublyLinkedList()).addFirst(node);node.value value;}else{ //新增//先判断容量是否已满if(kvMap.size() capacity){//执行淘汰策略Node node freqMap.get(minFreq).removeLast();kvMap.remove(node.key);}Node node new Node(key, value);kvMap.put(key, node);//加入频次为1的双向链表freqMap.computeIfAbsent(1, k - new DoublyLinkedList()).addFirst(node);minFreq 1;}}}public static void main(String[] args) {LFUCache cache new LFUCache(2);cache.put(1, 1);cache.put(2, 2);System.out.println(cache.get(1)); // 1 freq2cache.put(3, 3);System.out.println(cache.get(2)); // -1System.out.println(cache.get(3)); // 3 freq2cache.put(4, 4);System.out.println(cache.get(1)); // -1System.out.println(cache.get(3)); // 3 freq3System.out.println(cache.get(4)); // 4 freq2} }
http://www.hkea.cn/news/14278072/

相关文章:

  • 佛山哪里有做网站的郑州建设网站的公司
  • 吴中企业建设网站报价长春网站建设培训班
  • 建网站费用记账杭州建德网站建设
  • 用jsp做的购物网站上海移动端网络推广哪家强
  • vs做网站需要的插件菏泽做网站的
  • 四川建设发展股份有限公司网站旅游网站做精准营销的
  • 网站制作的语言中国建设建筑教育网站
  • 网站做1920px好吗赣州网站建设优化服务
  • 网站域名怎样注销重庆景点
  • 南昌网站设计哪个最好网站模板可以自己做
  • 网站报错403东莞做公众号的网站
  • 手机网站 教程河南省招标投标信息网官网
  • 北京做网站哪里好轻量应用云服务器
  • 泉州晋江网站建设费用广州网站建设品牌
  • 广东智能网站建设质量保障如何做网站网站代理
  • 建设网站有什么法律么证件照制作免费版
  • dkp网站开发微网站首页模板
  • 膳食管理东莞网站建设汉中建筑信息平台
  • 青岛做网站公司电话app开发公司名字
  • 东莞网站建站服务公司阿里云服务器创建多个网站吗
  • 淘客网站建设要求网络营销怎么做?
  • 旅游电子商务网站建设百度站长提交网站地图
  • 马蜂窝网站建设如何做网站logo 设置平滑
  • html5商城网站源码微信头像logo在线制作
  • 专业做设计师品牌网站河南国控建设集团招标网站
  • 外语教学网站开发伊春网站推广
  • 天天爱天天做网站江苏 建设 招标有限公司网站
  • 学校网站建设分工北京服装设计公司排名前十强
  • 郑州建设网站设计自己做门户网站
  • 大连建站费用seo单页面优化