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

国外产品设计网360优化大师

国外产品设计网,360优化大师,服务器做的网站怎么使用教程,企业网站托管套餐思路源自 【面试高频】146. LRU 缓存 采用哈希表双向链表 put一个键值对时,采用头插法将缓存块置于等级较高的位置,如果put数量超出限制,那么就将尾部的缓存块删除,以此达到置换的一个效果 get一个键值对也是同样的思路&#xf…

思路源自

【面试高频】146. LRU 缓存

 采用哈希表+双向链表

put一个键值对时,采用头插法将缓存块置于等级较高的位置,如果put数量超出限制,那么就将尾部的缓存块删除,以此达到置换的一个效果

get一个键值对也是同样的思路,如果不命中直接返回-1,如果命中先删除缓存块再头插缓存块,这样就达到了访问后更新缓存块等级的目的

class LRUCache {class DoubleLinkedNode {DoubleLinkedNode pre;int key;int value;DoubleLinkedNode next;public DoubleLinkedNode() {key=-1;value=-1;}public DoubleLinkedNode(int key, int value) {this.key=key;this.value = value;}}private int size;private int capacity;private Map<Integer,DoubleLinkedNode> cache;DoubleLinkedNode head;DoubleLinkedNode tail;//初始化两个虚拟节点,头尾指针互指public LRUCache(int capacity) {this.size=0;this.capacity=capacity;this.cache = new HashMap<>();this.head = new DoubleLinkedNode();this.tail = new DoubleLinkedNode();head.pre=null;head.next=tail;tail.pre=head;tail.next = null;}//获取缓存中的值,如果命中要更新缓存public int get(int key) {if (cache.containsKey(key)) {DoubleLinkedNode doubleLinkedNode = cache.get(key);this.delete(doubleLinkedNode.key);this.add(doubleLinkedNode.key, doubleLinkedNode.value);return doubleLinkedNode.value;} else {return -1;}}//缓存添加或者置换public void put(int key, int value) {if (cache.containsKey(key)) {this.delete(key);this.add(key, value);} else {if (this.capacity == this.size) {this.delete(tail.pre.key);}this.add(key, value);}}//新增一个新的缓存,采用头插法private void add(int key, int value) {DoubleLinkedNode doubleLinkedNode = new DoubleLinkedNode(key, value);doubleLinkedNode.pre=this.head;doubleLinkedNode.next=this.head.next;this.head.next.pre=doubleLinkedNode;this.head.next=doubleLinkedNode;this.size++;cache.put(key, doubleLinkedNode);}//删除一个现有缓存private void delete(int key) {DoubleLinkedNode doubleLinkedNode = cache.get(key);doubleLinkedNode.pre.next=doubleLinkedNode.next;doubleLinkedNode.next.pre = doubleLinkedNode.pre;this.size--;cache.remove(key);}
}/*** 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.dtcms.com/wzjs/194675.html

相关文章:

  • 两个网站互相做外链竞价推广托管公司价格
  • 网站怎么制作的重庆百度推广开户
  • 给人做时时彩网站建设百度官网下载电脑版
  • 哪家公司做网站开发做得比较好今天的重要新闻
  • 古典网站建设公司网站运营包括哪些内容
  • 苏州园区做网站太原seo报价
  • 做网络销售都做什么网站迅雷下载磁力天堂
  • 居委会 网站建设 提案百度推广代理公司哪家好
  • 深圳北站网站建设网络营销的优势有哪些?
  • 百度站长自动推送wordpress腾讯朋友圈广告代理
  • 网站开发分哪几个步骤百度推广售后服务电话
  • 做游戏网站公司提升关键词
  • 网站建设日程表是什么百度帐号管家
  • 网站后台是做什么的企业seo网络营销
  • 零基础建设网站视频教程百度快速排名
  • 天津做网站需要多少钱谷歌搜索引擎优化
  • 网站首页面福州网站关键词推广
  • seo外链推广百度官方优化指南
  • 阿里云服务器部署网站阿里云注册域名
  • 有网站用nodejs做后台搜索引擎优化的基础是什么
  • 做网站有哪几种语言sem推广竞价
  • 保定网站建设冀icp电商网络推广怎么做
  • 专业营销型网站建设公司优化大师电脑版下载
  • 园林设计网站大全一个完整的营销策划方案范文
  • 一整套vi设计六六seo基础运营第三讲
  • 如何开公司做网站怎么弄一个自己的网址
  • wordpress手机视频播放器钦州seo
  • 公司在选择网站时应考虑什么问题程序员培训机构排名
  • 网站开发赚钱吗深圳精准网络营销推广
  • 佛山网站优化软件地推接单平台找推网