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

pic cms图片网站管理系统手机版丽水品牌网站建设

pic cms图片网站管理系统手机版,丽水品牌网站建设,网站开发框架文档,wordpress 视频黑屏目录LRU理论题目思路代码实现一代码实现二题目来源 146. LRU 缓存 LRU理论 LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓…

目录

    • LRU理论
    • 题目思路
    • 代码实现一
    • 代码实现二

题目来源
146. LRU 缓存

LRU理论

LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量的满时候,优先淘汰最近很少使用的数据。

假设现在缓存内部数据如图所示:
这里我们将列表第一个节点称为头结点,最后一个节点为尾结点。(可以想象成队列)
在这里插入图片描述

当调用缓存获取 key=1 的数据,LRU 算法需要将 1 这个节点移动到头结点,其余节点不变
在这里插入图片描述

然后我们插入一个 key=8 节点,此时缓存容量到达上限,所以加入之前需要先删除数据。由于每次查询都会将数据移动到头结点,未被查询的数据就将会下沉到尾部节点,尾部的数据就可以认为是最少被访问的数据,所以删除尾结点的数据。
在这里插入图片描述
然后我们直接将数据添加到头结点。
在这里插入图片描述
这里总结一下 LRU 算法具体步骤:

  • 新数据直接插入到列表头部
  • 缓存数据被命中,将数据移动到列表头部
  • 缓存已满的时候,移除列表尾部数据。

题目思路

实现本题的两种操作,需要用到一个哈希表和一个双向链表。

代码实现一

继承java自带的LinkedHashMap

class LRUCache extends LinkedHashMap<Integer,Integer>{private int capacity;public LRUCache(int capacity) {super(capacity,0.75F,true);this.capacity = capacity;}public int get(int key) {return super.getOrDefault(key,-1);}public void put(int key, int value) {super.put(key, value);}@Overrideprotected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {return size() > capacity; }
}/*** 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);*/

在这里插入图片描述

代码实现二

class LRUCache {class Node{private int key,val;private Node pre,next;private Node(int k,int v){this.key = k;this.val = v;}}class DoubleList{// 头尾虚节点Node head = new Node(0,0);Node tail = new Node(0,0);int size;//初始化链表private DoubleList(){head.next = tail;tail.pre = head;size = 0;}//头插入void addFirst(Node n){head.next.pre = n;n.next = head.next;n.pre = head;head.next = n;size++;}//删除链表的某一个元素void remove(Node n){n.pre.next = n.next;n.next.pre = n.pre;size--;}//删除尾结点,并返回该节点Node removeLast(){Node res = tail.pre;remove(res);return res;} }HashMap<Integer,Node> map;DoubleList cache;int cap; //容量public LRUCache(int capacity) {map = new HashMap();cache = new DoubleList();this.cap = capacity;}public int get(int key) {if(!map.containsKey(key)){  //该节点不存在return -1;}Node res = map.get(key);cache.remove(res);cache.addFirst(res);return res.val;}public void put(int key, int value) {Node n = new Node(key,value);if(map.containsKey(key)){  //若该节点已经存在cache.remove(map.get(key));}else if(map.size() == cap){  //该节点不存在,但是cache已满Node last = cache.removeLast();map.remove(last.key);}cache.addFirst(n);map.put(key,n);}
}/*** 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/959097/

相关文章:

  • 长沙企业建网站费用如何做网站关键词霸屏
  • 太原做响应式网站自己用自己电脑做网站空间
  • 苏州网站建站公司网站开发算不算软件企业
  • 网站建设的基本技术qq小程序搭建
  • 网站外链建设可以提升网站权重吗资源专业网站优化排名
  • 企业网站建设需要多少钱免费虚拟房屋设计软件
  • 如何优选网站建设公司做网站及小程序需要会哪些技能
  • 企业门户网站的安全性网站建设公司首选华网天下
  • 手机网站展示外贸出口流程12步骤图
  • vs怎么做网站毕节市网站建设58同城
  • 湖南网站建设哪家专业电子商务网站系统详细设计的内容
  • 网站策划的重要性58同城佛山网站建设
  • 吴江公司网站建设电话深圳网站制作公司排名
  • 南京网站建设推南京网站建设设计wordpress任意电脑编辑
  • 免费做英文网站做网站绿标
  • 南通做网站公司哪家好集宁网站建设
  • 徐州商城网站建设东莞建设网雅园新村第20期名单公
  • 望江县住房和城乡建设局网站写网站论文怎么做的
  • 做专业课视频课的网站网站搭建逻辑结构图
  • 名词解释 网站内容wordpress修改地址后
  • 友情链接英文泉州百度首页优化
  • 各大网站搜索引擎河南平台网站建设制作
  • 建设征婚网站可以直接做ppt的网站
  • asp.net 获取网站域名少儿编程加盟机构
  • 做网站用笔记本做服务器吗程序开发步骤
  • 备用网站怎么做专注网站建设怎么样
  • 口碑好的坪山网站建设wordpress不同分类文章不同模板
  • 天津网站制作机玩法部实时热点新闻事件2021
  • 网站速度优化 js加载国内十大高端定制西服品牌
  • 手机版网站开发框架洛阳网站建设哪家好