牛客网 | 高频面试题 | 设计LRU缓存结构

华为机试---LRU算法  最近最少使用算法,如果缓存不够,LRU算法就是将最近最久未使用的页面淘汰,并计算最终的缺页次数 public static int count(int size , int[] data){     int count = 0;     return count; } size缓存区大小,保存的最大页面数 data数组按顺序向缓存发送页面请求 (1)需要判断缓冲区是否已经到最 阅读详情

文章目录

题目

设计LRU缓存结构_牛客网

示例1
	输入
		[[1,1,1],[1,2,2],[1,3,2],[2,1],[1,4,4],[2,2]],3
	返回值
		[1,-1]
说明
	第一次操作后:最常使用的记录为("1", 1)
	第二次操作后:最常使用的记录为("2", 2),("1", 1)变为最不常用的
	第三次操作后:最常使用的记录为("3", 2),("1", 1)还是最不常用的
	第四次操作后:最常用的记录为("1", 1),("2", 2)变为最不常用的
	第五次操作后:大小超过了3,所以移除此时最不常使用的记录("2", 2),加入记录("4", 4),并且为最常使用的记录,然后("3", 2)变为最不常使用的记录

解析

class Solution {
private:
public:
    /**
     * lru design
     * @param operators int整型vector<vector<>> the ops,操作数
     * @param k int整型 the k ,LRU缓存大小为k
     * @return int整型vector
     */
    int capacity;
    list<pair<int,int>> lrulst;//链表
    //list<pair<int,int>>::iterator 指向里面的元素
    unordered_map<int,list<pair<int,int>>::iterator > lruhash;//map
    vector<int> LRU(vector<vector<int> >& operators, int k) {
        // write code here
        vector<int> res;
        capacity = k;
        for(auto opt : operators){
            switch (opt[0]){
                case 1:
                    set(opt[1],opt[2]);
                    break;
                case 2:
                    res.push_back(get(opt[1]));
                    break;
                default:
                    break;
            }
        }
        return res;
    }
    void set(int key,int val){
        auto iter = lruhash.find(key);
        //判断是否存在
        if(iter == lruhash.end()) 
        {
            //如果容积满了
            if(capacity == lrulst.size())
            {
                //删掉最末元素
                lruhash.erase(lrulst.back().first);
                lrulst.pop_back();
            }
        }
        else    lrulst.erase(iter->second);//删掉更新一下
        //更新
        lrulst.push_front({key,val});
        lruhash[key] = lrulst.begin();
    }
    int get(int key){
        auto iter = lruhash.find(key);
        if(iter == lruhash.end())    return -1;
        int val = iter->second->second;
        //删掉链表节点,再重新添加
        lrulst.erase(iter->second);
        lrulst.push_front(*iter->second);
        return val;
    }
};
前端面试之LeetCode面试常考题目 阅读详情

相关推荐

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

牛客网刷题笔记131111 Python实现LRU+二叉树先中后序打印+SQL并列排序

从学校步入职场一年多,已经很久没刷过题了,为后续稍微做些提前的准备,还是重新开始刷刷题。从未做过计划表,这回倒是做了个计划表,希望能坚持吧。刷题比较随性且量级不大,今天就写了2个算法+2个sql,sql感觉都相对简单且题库没什么好写的,后续考虑将sql的刷题计划改为对理论知识的回温。

qq_39051660的博客 664

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

leetcode面试题 16.25. LRU缓存

设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。 它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 pu...

haoweng4800的博客 349

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 360

华为OD机试双机位C卷-停车场收入统计 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 停车场收入统计,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 停车场收入统计。

qq_45776114的博客 2185

牛客网刷题-设计LRU缓存结构

问题描述 题目描述 设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能 set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的value值 [要求] set和get方法的时间复杂度为O(1) 某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。 当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。 若opt=1,接下来两个整数x, y,表示set(x, y) 若opt=2,接下来一个整数

qq_35398517的博客 367

【AI智能体】Codex + Seedance2.5 制作AI视频实战操作详解

【AI智能体】Codex + Seedance2.5 制作AI视频实战操作详解

congge_study的博客 3763

面试大厂最常考算法之一LRU缓存算法

题目 146. LRU 缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限

qq_23923713的博客 509

2024顶级提示工程工具:提升效率的12个神器

LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。

AIGC应用创新大全的博客 1098

【论文复现】——基于LM优化的NDT点云配准算法

传统的正态分布变换配准算法处理初始位姿变换相差较大的两帧点云时,存在无法收敛或者陷入局部最小值的问题。为了提高算法的收敛性能,提出了一种基于LM方法改进的三维正态分布变换配准算法。

点云侠的博客 1163

17数据结构与算法刷题之【模拟题】篇

除了去年11月份以及今年近几月的算法刷题之外,只有在当时20年蓝桥杯准备的时候才刷过一些题,在当时就有接触到一些动归、递归回溯、贪心等等,不过那会也还是一知半解,做的题目也特别少,因为考虑到之后面试有算法题以及数据结构算法对于一个程序员十分重要,我也开始了刷题之路。我目前的学习数据结构与算法及刷题路径:1、学习数据结构的原理以及一些常见算法。2、代码随想录:跟着这个github算法刷题项目进行分类刷,在刷题前可以学习一下对应类别的知识点,而且这里面每道题都讲的很详细。牛客网—面试必刷101题。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 785

【YOLOv8改进-注意力机制】BRA(bi-level routing attention ):双层路由注意力

【YOLOv8改进-注意力机制】BRA(bi-level routing attention ):双层路由注意力我们提出了一种新颖的动态稀疏注意力机制,通过双层路由实现更加灵活且具有内容感知的计算分配。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 3167

C++实现LRU缓存:哈希表与双向链表的经典组合

缓存是提升系统性能的核心技术之一,其核心原理基于计算机科学的局部性原理,即最近被访问的数据未来更可能被再次访问。LRU(最近最少使用)算法通过优先淘汰最久未使用的数据来实现高效的缓存管理,这一策略在操作系统页面置换、数据库缓冲池及Redis等缓存系统中广泛应用。从技术实现角度看,LRU需要同时支持O(1)复杂度的查找、插入和删除操作,这通常通过哈希表与双向链表的组合来实现——哈希表提供快速键值查找,双向链表维护访问顺序。在工程实践中,这种数据结构设计不仅解决了高频面试题,更体现了缓存系统设计的核心思想。本文

weixin_30448603的博客 312

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

js 数组按奇偶拆分_字节跳动新增高频题(按岗位分类)

点击上方蓝字关注我更新牛客7.28日~10.23日的389篇字节跳动面经所涉及的207道编程题。本次没有在leetcode上找到的高频题会陆续在#补充题系列补充:排序奇位升序偶位降序的链表圆环回原点问题两个有序数组的交集给一数组,寻找满足条件最大值的区间:区间最小元素*区间元素和36进制加法将数组中的所有负数移到左边,所有正数移到右边接下来把这次新增的题目按岗位进行分类如下表所示,大家可...

weixin_35607076的博客 370

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

高频面试真题答案 -java后端 -Redis篇

​ 原贴: 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 ​

qq_46529610的博客 964

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2025牛客网最新整理 1000 道大厂高频 Java 面试题附答案解析

面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

m0_69632475的博客 926

数据结构与算法

数据结构与算法是IT行业的核心竞争力,本文系统剖析其本质与学习方法。数据结构是高效存储组织数据的方式(如数组、链表),算法是明确的运算步骤(如排序、搜索)。其重要性体现在:大厂校招笔试80%为算法题,面试常考红黑树、动态规划等;职场中直接影响系统性能优化能力。高效学习路径包括:手写代码+画图分析、分类突破高频题型(线性结构、树与图、哈希等)、实战刷题。推荐《算法导论》、LeetCode等资源,强调持续半年以上训练才能掌握。附录提供知识图谱和考点速查表,帮助开发者将算法转化为技术利刃。

我的博客 1020

牛客网官方出品:2025 Java秋招「金九银十」八股文最全指南

面试是跳槽涨薪最直接有效的方式,金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。

m0_50180963的博客 603

Python链表算法面试指南:高频题解与实战技巧

链表作为基础数据结构,通过节点指针实现动态内存管理,在插入删除操作上具有O(1)时间复杂度优势。其核心原理在于指针操作与边界条件处理,广泛应用于LRU缓存、环形检测等工程场景。针对技术面试需求,本文整理LeetCode高频链表题型,包含反转链表、环形检测等经典问题的Python实现,采用迭代/递归双解法,详细分析时间复杂度与空间复杂度。特别涵盖快慢指针、虚拟头节点等关键技术,以及白板编程中的常见错误规避方法,帮助开发者掌握链表问题的系统解决框架。

weixin_34258838的博客 332

牛客网2026最新大厂Java高频面试题精选(附标准答案)

最后祝愿你也能顺利拿下大厂offer,共勉!因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图,有需要的朋友可以点击下方名片获取。

sjkflw121150的博客 206

终于学会反转链表了|leetcode206、nc78(Java、cpp实现)

前期提要:链表反转是高频考点,在各大高频题排名网站长期占领前三,在牛客网稳居第一。链表反转之所以很重要,是因为它在实际编程中应用广泛,可以解决很多与链表相关的问题。一些算法和数据结构需要借助链表来实现,比如LRU缓存淘汰算法、数据结构栈和队列等等。而链表的反转是其中一个最基本的操作,通过反转可以使得链表的遍历顺序与原来相反,这样就可以更方便实现一些算法和问题的解决。同时,链表反转也是一道经典的面试题,掌握链表反转的方法可以帮助程序员在面试中获得更好的表现。🙂题目来源:牛客nc78;

染落林间色的博客 1172

什么是数据结构与算法

学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。如果需要刷题,这里也给大家推荐一个非常好的免费刷题网站牛客题库:(415题)

xm-love-mq的博客 195

java复习目录 基础版,持续补充相关面试题博客

Java 8+新特性:如Lambda表达式、Stream API、Optional、新的日期时间API等。B站Java面试专题:搜索“Java面试”或“Spring面试”,有很多免费视频。分模块复习:将Java基础、并发、JVM、框架等分模块复习,确保每个模块都掌握。通过以上资源和策略,你可以更高效地准备Java面试,祝你顺利找到理想的工作!保持自信:面试不仅是技术考察,也是沟通能力的体现,保持自信和积极的态度。:GitHub上的Java面试指南,涵盖基础、并发、JVM、框架等。

weixin_45762066的博客 738

算法与数据结构考点总结(程序员面试要点)

算法与数据结构是计算机科学的核心基础,也是面试与考试中的高频考点。算法与数据结构考点涵盖广泛,需通过 理论学习 + 实践刷题 相结合的方式掌握。建议从基础数据结构入手,逐步攻克动态规划、贪心算法等难点,同时注重时间复杂度的分析与优化。

weixin_44088472的博客 911

网易实习面经中的算法题(java版本含注释)

该文章主要是收集牛客上面经被问到的高频算法 主要供个人参考以及理解

码农研究僧的博客 1433
上一篇: 牛客网 | 高频面试题 | 实现二叉树先序,中序和后序遍历
下一篇: 牛客网 | 高频面试题 | 判断链表中是否有环
stone_fall
博客等级 码龄9年 230粉丝 256原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值