链表-设计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缓存结构_牛客题霸_牛客网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第2章】SpringBoot配置文件

文章目录 前言一、编写配置信息1. properties2. yml 二、获取配置信息1.直接获取2.配置类形式 总结 前言 SpringBoot工程创建后&#xff0c;会为我们提供一个默认的配置文件(application.properties)&#xff0c;配置文件主要用于那些可能发生变化且经常改变的属性值。 一、编…

Autodesk 3DS Max v2025 解锁版安装教程 (3D 建模软件)

前言 Autodesk 3ds Max 是一款功能强大的 3D 建模和动画解决方案&#xff0c;游戏开发人员、视觉效果艺术家和平面设计师使用它来创建庞大的世界、令人惊叹的场景和引人入胜的虚拟现实 (VR) 体验。 Autodesk 3DS MAX是业界使用最广泛的3D建模和动画软件程序之一&#xff0c;它…

盲盒小程序开发,数字化发展下的优势

近年来&#xff0c;盲盒经济得到了快速发展&#xff0c;不少人开始加入到盲盒大军中&#xff0c;盲盒市场规模不断扩大。 盲盒最大的特点就是能够给消费者带来拆盒的刺激性和惊喜感。盲盒商品大多是动漫手办、周边等&#xff0c;具有较大的收藏价值&#xff0c;因此深深吸引着…

虚拟主机安装modstart

郑重说明!!!&#xff1a;虚拟主机通常无法绑定运行目录到子目录&#xff0c;因此部署时会出现太多的安全隐患&#xff0c;配置比较繁琐&#xff0c;我们强烈不推荐&#xff01;此方法只给技术爱好者作为测试参考&#xff0c;不再提供额外技术支持。 以免费云服务器&#xff0c;…

OpenAI模型GPT-4o、GPT-4、Gemini 1.5性能比较

大家好&#xff0c;OpenAI最新推出的GPT-4o&#xff0c;标志着人工智能语言模型和交互方式迈入了新纪元。最引人注目的是&#xff0c;GPT-4o支持实时互动和流畅的对话切换&#xff0c;让交流更加自然。 本文将对比分析GPT-4o、GPT 4以及谷歌的Gemini和Unicorn模型&#xff0c;…

Redis批量删除指定前缀的key

在redis-cli中键入命令&#xff0c;批量删除前缀为business_login_tokens:的key&#xff1a; eval "return redis.call(del, unpack(redis.call(keys, ARGV[1])))" 0 business_login_tokens:*在Redis中&#xff0c;EVAL命令用于执行Lua脚本。这个特定的命令是用来批…

C#结合JS实现HtmlTable动态添加行并保存到数据库

目录 需求 效果视频演示 范例运行环境 准备数据源 数据表设计 UI及表结构Json配置 Json数据包提交配置 设计实现 前端UI Javascript 脚本 Jquery引用 C# 服务端操作 小结 需求 在 Web 应用项目中&#xff0c;实现一对多录入的数据管理功能是一项常见的应用。因此…

深度学习模型压缩技术分析

模型压缩概述 模型压缩是指通过各种技术手段来减小机器学习模型的大小&#xff0c;以减少存储空间、加快推理速度和降低计算成本的过程。这种技术可以帮助在资源受限的设备上部署更大的模型&#xff0c;提高模型的效率和性能。 模型压缩有多种方法&#xff0c;包括模型剪枝、…

JVM-调优之-如何使用arthas-观察jvm-cpu-内存-垃圾回收等信息

前言&#xff1a; 可以简单代替把dump文件下载下来后用visualvm分析了&#xff1b;跟visualvm类似的&#xff1b; docker中如何安装arthas看这个&#xff1a;docker中怎么使用arthas_arthas 集成到容器镜像-CSDN博客 curl -O https://arthas.aliyun.com/arthas-boot.jar wget …

头歌OpenGauss数据库-I.复杂查询第9关:交换性别

任务描述 本关任务&#xff1a;给定一张 tb_Salary 表&#xff0c;如下所示&#xff0c;有 m 男性 和 f 女性的值。交换所有的 f 和 m 值&#xff08;例如&#xff0c;将所有 f 值更改为 m&#xff0c;反之亦然&#xff09;。 idnamesexsalary1Elonf70002Donnyf80003Careym60…

npm,yarn,cnpm,tyarn,pnpm 安使用装配置镜像

npm 安装 安装node后就可以使用了 官方默认地址 npm config set registry https://registry.npmjs.org 镜像 npm config set registry https://registry.npm.taobao.org npm config set registry http://registry.npmmirror.org全局安装依赖 npm install -g <包名&g…

软考之零碎片段记录(三十一)+复习巩固(错题整理,知识点总结,易错题)

1. 奇偶校验 只能检测一位数的错误。但无法纠正错误。若有奇数个数据位出错&#xff0c;可检测。有局限性。 2. 深度与广度优先遍历 参考题【【数据结构自用】1.图深度优先遍历2.找有向图中的强连通分量数目3.给出图的任意两个拓扑序列】https://www.bilibili.com/video/BV…

在Github上寻找安装ROS软件包

1、创建一个功能包 并下载git sudo apt install git 2、找到自己想在github上要克隆的包 复制此链接 3、克隆到本地 git clone 链接 4.scripts目录用于放置脚本文件和python程序 使用脚本安装编译需要的依赖库 5、下载完成后&#xff0c;在~catkin_ws目录下运行catkin_make进…

【退役之重学Java】关于Spring Cloud 微服务和分布式

一、微服务是什么 微化拆分&#xff1a; 拒绝大型单体应用&#xff0c;基于业务边界进行服务微化拆分&#xff1b;独立部署&#xff1a; 通过完全自动化部署机制来独立部署独立运行&#xff1a; 各个服务独立运行在自己的进程中&#xff1b;轻量级通信&#xff1a; 微服务之间使…

HTTP响应的基本概念

目录 HTTP响应中的一些信息 HTTPS HTTP响应中的一些信息 状态码&#xff1a;描述了这次HTTP请求是否成功&#xff0c;以及失败的原因。 1&#xff09;200 ---OK 表示这次访问成功了。 2&#xff09;404 ---Not Found 表示客户端请求的资源在服务器这边不存在。 3&a…

二叉树的链式实现

目录 一、二叉树的基础操作 二、二叉树代码图解 2.1 遍历 2.2 求大小 2.3 创建与销毁 2.4 与队列结合解决问题 三、二叉树C语言源码汇总 二叉树的代码实现运用了函数递归的思想&#xff0c;了解函数递归的知识请见博主的另一篇博客&#xff1a; http://t.csdnimg.cn/Po…

SRE视角下的DevOps:构建稳定高效的软件交付流程

SRE 和 DevOps 有什么区别和联系&#xff1f;本文对此进行了解读&#xff0c;并着重从 SRE 实践出发阐述了 DevOps 的建设思路。 SRE 就是在用软件工程的思维和方法论完成以前由系统管理员团队手动完成的工作。SRE 的职责是运维一个服务&#xff0c;该服务由一些相关的系统组件…

【深度学习】yolov8 seg实例分割训练,交通灯

文章目录 一、类别定义二、标注后再清洗数据三、训练yolov8 seg四、部署五、代码资料 一、类别定义 类别0&#xff1a; 类别1&#xff1a; 类别2&#xff1a; 类别3&#xff1a; 类别4&#xff1a; 类别5&#xff1a; 类别6&#xff1a; 类别7&#xff1a; 二、标注后再清洗…

同名在线查询系统微信小程序源码下载支持多种流量主,附带系统教程

同名在线查询系统微信小程序源码下载支持多种流量主这是一款支持查询同名的一款微信小程序 该款小程序支持多种查询模式 重名查询&#xff0c;热度查询&#xff0c;概率香查询 源码免费下载地址抄笔记(chaobiji.cn)