news 2026/10/3 8:47:11

DeepSeek LeetCode 146. LRU 缓存 C++实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 146. LRU 缓存 C++实现
#include<unordered_map>#include<list>classLRUCache{private:intcap;// 链表头部是最近使用,尾部是最久未使用std::list<std::pair<int,int>>cache;// {key, value}std::unordered_map<int,std::list<std::pair<int,int>>::iterator>map;public:LRUCache(intcapacity):cap(capacity){}intget(intkey){autoit=map.find(key);if(it==map.end())return-1;// 命中,把该节点移到链表头部cache.splice(cache.begin(),cache,it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=map.find(key);// key 已存在:更新值并移到头部if(it!=map.end()){it->second->second=value;cache.splice(cache.begin(),cache,it->second);return;}// 容量已满:淘汰尾部节点(最久未使用)if((int)cache.size()==cap){intoldKey=cache.back().first;cache.pop_back();map.erase(oldKey);}// 插入新节点到头部cache.emplace_front(key,value);map[key]=cache.begin();}};

思路

经典的 哈希表 + 双向链表:

· unordered_map 存 key -> 链表节点迭代器,实现 O(1) 查找。
· std::list 维护访问顺序:
· 头部 begin():最近使用
· 尾部 back():最久未使用
· splice 可以把节点在 O(1) 内移动到头部,且不会使迭代器失效,所以 map 里的迭代器始终有效。

复杂度

· 时间:get / put 均为 O(1)
· 空间:O(capacity)

测试

#include<iostream>intmain(){LRUCachecache(2);cache.put(1,1);cache.put(2,2);std::cout<<cache.get(1)<<std::endl;// 1cache.put(3,3);// 淘汰 2std::cout<<cache.get(2)<<std::endl;// -1cache.put(4,4);// 淘汰 1std::cout<<cache.get(1)<<std::endl;// -1std::cout<<cache.get(3)<<std::endl;// 3std::cout<<cache.get(4)<<std::endl;// 4return0;}

补充:如果面试要求手写双向链表

有些面试官不允许直接用 std::list,这时可以自己定义 Node { key, value, prev, next },并用两个哨兵 head / tail 简化边界处理。核心操作:

· addToHead(node)
· removeNode(node)
· moveToHead(node)
· removeTail()

逻辑和上面完全一致,只是把 std::list 换成手写指针操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 8:47:10

超市定时播音软件,免费版支持循环播放

软件介绍 今天介绍的这款软件叫"超市播音系统"&#xff0c;顾名思义&#xff0c;它就是一款给超市做定时语音播放的工具。这类软件目前市面上基本都要收费&#xff0c;找了一圈下来&#xff0c;只有这款是完全免费的。 安装版&#xff0c;界面一眼能看懂 软件是安…

作者头像 李华
网站建设 2026/10/3 8:45:32

游戏挂机软件哪个好免费 游戏挂机软件推荐

游戏挂机软件哪个好免费&#xff1f;不少玩家想解放双手&#xff0c;却总被免费额度、连接数量和延迟画质劝退。游戏挂机软件哪个好免费&#xff0c;其实不用反复试错&#xff0c;一款核心功能免费、支持多开且远程操控稳定的工具就能满足日常挂机需求。无界趣连2.0针对游戏挂机…

作者头像 李华
网站建设 2026/10/3 8:43:47

程序员转行AI:轻松入门大模型应用开发,高薪就业指南

随着AI行业兴起&#xff0c;程序员薪资最高的岗位多为AI相关。大模型应用开发门槛相对较低&#xff0c;适合传统程序员转行。核心工作包括调用GPT等大模型API、做Prompt工程及搭建应用系统。学习路线从Python基础到LangChain框架实战&#xff0c;分阶段掌握API调用、框架使用及…

作者头像 李华
网站建设 2026/10/3 8:43:02

PLC编程必学!S7-1200数学运算指令11种用法,一篇全讲透

在西门子S7-1200 PLC编程里&#xff0c;数学函数指令是实现数据运算、模拟量处理、项目逻辑控制的核心功能。如果说触点、定时器、计数器是PLC的“手脚”&#xff0c;那数学函数指令就是PLC的“计算大脑”——现场90%的金额统计、工程量换算、数据限值控制、公式化运算&#xf…

作者头像 李华
网站建设 2026/10/3 8:42:29

超长时间录音APP有哪些?主流工具盘点

超长时间录音场景下&#xff0c;多数普通录音工具会出现后台进程被系统清理、大体积音频文件闪退、录制数小时后内容片段缺失等问题&#xff0c;这类问题在全天专场会议、长线专访、全日研学讲座场景中出现频率最高。本次选取8款主流工具&#xff0c;围绕超长时间录音核心能力展…

作者头像 李华