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

链表-设计LRU缓存结构

题目描述:

代码实现:这里记录了根据LRU算法原理最直接理解的代码实现。

import java.util.*;//存储输入内容,记录访问权值
class CounterInfo {int key;int value;int times;//代表key对应的权值,值越小优先级越高public CounterInfo(int key, int value) {this.key = key;this.value = value;this.times = 0;}
}public class Solution {ArrayList<CounterInfo> intarr;int maxsize;public Solution(int capacity) {// write code hereintarr = new ArrayList<CounterInfo>(0);this.maxsize = capacity;}//除了key以外的元素都更新times++public void refreshTimes(int key) {Iterator infoit = intarr.iterator();while (infoit.hasNext()) {CounterInfo nowinfo = (CounterInfo)infoit.next();if (nowinfo.key != key) {nowinfo.times++;}}}/*1.遍历列表看是否存在key,如果存在则返回相应的value,如果不存在返回-12.如果存在目标key,并且目标key对应权值不为0,更新目标key对应的权值为0,其他key对应权值都+13.如果存在目标key,但是目标key对应权值为0,列表内所有权值不做改变*/public int get(int key) {boolean isfind = false;boolean isrefresh = false;int resValue = -1;//查找intarr中是否存在keyIterator infoit = intarr.iterator();while (infoit.hasNext()) {CounterInfo nowinfo = (CounterInfo)infoit.next();if (nowinfo.key == key) {isfind = true;resValue = nowinfo.value;if (nowinfo.times != 0) {isrefresh = true;nowinfo.times = 0;} else {isrefresh = false;}}}if (isfind) {if (isrefresh) {//更新其他info的timesthis.refreshTimes(key);}return resValue;} else {return -1;}}/*1.看是否存在key,如果存在更新key对应的value和权值=02.如果不存在:2.1 列表满:选择权值最大的元素,修改key,value,权值=0;其他元素权值+12.2 列表未满:列表添加新的CounterInfo对象;其他元素权值+1*/public void set(int key, int value) {//先看是否存在boolean isfind = false;//查找intarr中是否存在keyIterator infoit = intarr.iterator();while (infoit.hasNext()) {CounterInfo nowinfo = (CounterInfo)infoit.next();if (nowinfo.key == key) {isfind = true;//更新valuenowinfo.value = value;if (nowinfo.times != 0) {nowinfo.times = 0;this.refreshTimes(key);}}}if (!isfind) {//判断是否达到最大长度if (intarr.size() == maxsize) {//找到最久未访问的元素,更新key,value,timesinfoit = intarr.iterator();//找到最大timeint maxtime = 0;while (infoit.hasNext()) {CounterInfo nowinfo = (CounterInfo)infoit.next();maxtime = maxtime > nowinfo.times ? maxtime : nowinfo.times;}//根据最大time更新key-value值infoit = intarr.iterator();while (infoit.hasNext()) {CounterInfo nowinfo = (CounterInfo)infoit.next();if (nowinfo.times == maxtime) {nowinfo.times = 0;nowinfo.key = key;nowinfo.value = value;}}} else {CounterInfo newinfo = new CounterInfo(key, value);intarr.add(newinfo);}this.refreshTimes(key);}}
}/*** Your Solution object will be instantiated and called as such:* Solution solution = new Solution(capacity);* int output = solution.get(key);* solution.set(key,value);*/

刷题链接:

设计LRU缓存结构_牛客题霸_牛客网

相关文章:

  • uni-app App端实现文字语音播报(Ba-TTS)
  • PTA 6-4 配对问题
  • 如何参与github开源项目并提交PR
  • Linux下环境变量配置出错导致基础命令使用不了的问题解决
  • 抖音分享链接视频下载
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • 手机相册的照片彻底删除了怎么恢复?删除照片恢复的5种方法
  • 甘肃教育杂志社-甘肃教育编辑部
  • CSP俄罗斯方块(简单易懂)
  • C语言笔记21 •模拟atoi函数•
  • conda常见命令
  • 汽车R155法规中,汽车获取到的VTA证书,E后面的数字表示什么意思?
  • MySQL入门学习-查询进阶.别名
  • 携手AI,如何共赢未来?
  • java string类
  • @jsonView过滤属性
  • [deviceone开发]-do_Webview的基本示例
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  •  D - 粉碎叛乱F - 其他起义
  • golang 发送GET和POST示例
  • MySQL的数据类型
  • Rancher-k8s加速安装文档
  • Redis在Web项目中的应用与实践
  • TypeScript迭代器
  • vagrant 添加本地 box 安装 laravel homestead
  • vue-cli在webpack的配置文件探究
  • 大数据与云计算学习:数据分析(二)
  • 飞驰在Mesos的涡轮引擎上
  • 简单数学运算程序(不定期更新)
  • 开发基于以太坊智能合约的DApp
  • 驱动程序原理
  • 学习笔记TF060:图像语音结合,看图说话
  • 在Mac OS X上安装 Ruby运行环境
  • MyCAT水平分库
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # wps必须要登录激活才能使用吗?
  • #Linux(make工具和makefile文件以及makefile语法)
  • $().each和$.each的区别
  • ${factoryList }后面有空格不影响
  • $nextTick的使用场景介绍
  • (12)Linux 常见的三种进程状态
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (纯JS)图片裁剪
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (算法二)滑动窗口
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法