LeetCode - #146 LRU 缓存(Top 100)

开发者 2024-9-27 16:00:46 56 0 来自 中国
前言

本题为 LeetCode 前 100 高频题
我们社区一连会将顾毅(Netflix 增长黑客,《iOS 口试之道》作者,ACE 职业健身锻练。)的 Swift 算法题题解整理为笔墨版以方便各人学习与阅读。
LeetCode 算法到现在我们已经更新到 145 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们渴望各人可以在上班路上阅读,长久积累会有很大提拔。
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果各人有建媾和意见欢迎在文末留言,我们会努力满足各人的需求。
难度水平:中等
1. 形貌

请你筹划并实现一个满足  LRU (迩来最少利用) 缓存 束缚的数据布局。
实现 LRUCache 类:

  • LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
  • int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
  • void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入利用导致关键字数目高出 capacity ,则应该 逐出 最久未利用的关键字。
函数 get 和 put 必须以 O(1) 的匀称时间复杂度运行。
2. 示例

示例 1
输入["LRUCache", "put", "put", "get", "put", "get", "put", "get", "get", "get"][[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]输出[null, null, null, 1, null, -1, null, -1, 3, 4]表明LRUCache lRUCache = new LRUCache(2);lRUCache.put(1, 1); // 缓存是 {1=1}lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}lRUCache.get(1);    // 返回 1lRUCache.put(3, 3); // 该利用会使得关键字 2 取消,缓存是 {1=1, 3=3}lRUCache.get(2);    // 返回 -1 (未找到)lRUCache.put(4, 4); // 该利用会使得关键字 1 取消,缓存是 {4=4, 3=3}lRUCache.get(1);    // 返回 -1 (未找到)lRUCache.get(3);    // 返回 3lRUCache.get(4);    // 返回 4束缚条件:

  • 1 <= capacity <= 3000
  • 0 <= key <= 10000
  • 0 <= value <= 10^5
  • 最多调用 2 * 10^5 次 get 和 put
3. 答案
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 18:27, Processed in 0.129892 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表