LRU緩存機制

運用你所掌握的數據結構,設計和實現一個??LRU (最近最少使用) 緩存機制。它應該支持以下操作: 獲取數據 get 和 寫入數據 put 。

獲取數據 get(key) - 如果密鑰 (key) 存在于緩存中,則獲取密鑰的值(總是正數),否則返回 -1。
寫入數據 put(key, value) - 如果密鑰不存在,則寫入其數據值。當緩存容量達到上限時,它應該在寫入新數據之前刪除最近最少使用的數據值,從而為新的數據值留出空間。

進階:

你是否可以在?O(1) 時間復雜度內完成這兩種操作?

示例:

LRUCache cache = new LRUCache( 2 /* 緩存容量 */ );

cache.put(1, 1);
cache.put(2, 2);
cache.get(1); ? ? ? // 返回 ?1
cache.put(3, 3); ? ?// 該操作會使得密鑰 2 作廢
cache.get(2); ? ? ? // 返回 -1 (未找到)
cache.put(4, 4); ? ?// 該操作會使得密鑰 1 作廢
cache.get(1); ? ? ? // 返回 -1 (未找到)
cache.get(3); ? ? ? // 返回 ?3
cache.get(4); ? ? ? // 返回 ?4

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/lru-cache
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

解法:

class LRUCache{
public:LRUCache(int capacity) {cap = capacity;}int get(int key) {auto it = m.find(key);if (it == m.end()) return -1;l.splice(l.begin(), l, it->second);return it->second->second;}void put(int key, int value) {auto it = m.find(key);if (it != m.end()) l.erase(it->second);l.push_front(make_pair(key, value));m[key] = l.begin();if (m.size() > cap) {int k = l.rbegin()->first;l.pop_back();m.erase(k);}}private:int cap;list<pair<int, int>> l;unordered_map<int, list<pair<int, int>>::iterator> m;
};

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385150.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1083 是否存在相等的差 (20 分)

給定 N 張卡片&#xff0c;正面分別寫上 1、2、……、N&#xff0c;然后全部翻面&#xff0c;洗牌&#xff0c;在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減&#xff08;大減小&#xff09;&#xff0c;得到 N 個非負差值&#xff0c;其中是否存在相等的差&#…

c++如何防止一個類被其他類繼承?

如何在防止一個類被其他的類繼承呢&#xff1f; 如果是僅僅為了達到這個目的可以直接把這個類的構造函數設置成私有的&#xff0c;這樣就杜絕了其他類的繼承。也相當于毀掉了這個類&#xff08;無法再創造出自己的對象&#xff09;。 那么怎么樣既要保證這個類的完整性&#…

1084 外觀數列 (20 分)

外觀數列是指具有以下特點的整數序列&#xff1a; d, d1, d111, d113, d11231, d112213111, ...它從不等于 1 的數字 d 開始&#xff0c;序列的第 n1 項是對第 n 項的描述。比如第 2 項表示第 1 項有 1 個 d&#xff0c;所以就是 d1&#xff1b;第 2 項是 1 個 d&#xff08;對…

C++中構造函數和析構函數可以拋出異常嗎?

不建議在構造函數中拋出異常。當構造函數中拋出異常時&#xff0c;析構函數將不會被執行&#xff0c;需要手動釋放內存。析構函數不應該拋出異常。當析構函數中有一些可能發生的異常時&#xff0c;這時候要把可能發生的異常完全封裝在析構函數內部&#xff0c;決不能讓它拋出到…

1085 PAT單位排行 (25 分

每次 PAT 考試結束后&#xff0c;考試中心都會發布一個考生單位排行榜。本題就請你實現這個功能。 輸入格式&#xff1a; 輸入第一行給出一個正整數 N&#xff08;≤&#xff09;&#xff0c;即考生人數。隨后 N 行&#xff0c;每行按下列格式給出一個考生的信息&#xff1a; 準…

23. 合并K個排序鏈表

合并 k 個排序鏈表&#xff0c;返回合并后的排序鏈表。請分析和描述算法的復雜度。 示例: 輸入: [ 1->4->5, 1->3->4, 2->6 ] 輸出: 1->1->2->3->4->4->5->6 解法&#xff1a; class Solution { public:ListNode* mergeKLists(vect…

1086 就不告訴你 (15 分)

做作業的時候&#xff0c;鄰座的小盆友問你&#xff1a;“五乘以七等于多少&#xff1f;”你應該不失禮貌地圍笑著告訴他&#xff1a;“五十三。”本題就要求你&#xff0c;對任何一對給定的正整數&#xff0c;倒著輸出它們的乘積。 輸入格式&#xff1a; 輸入在第一行給出兩個…

學習鏈接

序號鏈接1Forz Blog [點擊鏈接]2arkingc/note [點擊鏈接] linw7/Skill-Tree [點擊鏈接] chenshuaihao/NetServer [點擊鏈接]

1087 有多少不同的值 (20 分)

當自然數 n 依次取 1、2、3、……、N 時&#xff0c;算式 ? 有多少個不同的值&#xff1f;&#xff08;注&#xff1a;? 為取整函數&#xff0c;表示不超過 x 的最大自然數&#xff0c;即 x 的整數部分。&#xff09; 輸入格式&#xff1a; 輸入給出一個正整數 N&#xff08;…

1088 三人行 (20 分)

子曰&#xff1a;“三人行&#xff0c;必有我師焉。擇其善者而從之&#xff0c;其不善者而改之。” 本題給定甲、乙、丙三個人的能力值關系為&#xff1a;甲的能力值確定是 2 位正整數&#xff1b;把甲的能力值的 2 個數字調換位置就是乙的能力值&#xff1b;甲乙兩人能力差是丙…

1089 狼人殺-簡單版 (20 分)

以下文字摘自《靈機一動好玩的數學》&#xff1a;“狼人殺”游戲分為狼人、好人兩大陣營。在一局“狼人殺”游戲中&#xff0c;1 號玩家說&#xff1a;“2 號是狼人”&#xff0c;2 號玩家說&#xff1a;“3 號是好人”&#xff0c;3 號玩家說&#xff1a;“4 號是狼人”&#…

1090 危險品裝箱 (25 分)

集裝箱運輸貨物時&#xff0c;我們必須特別小心&#xff0c;不能把不相容的貨物裝在一只箱子里。比如氧化劑絕對不能跟易燃液體同箱&#xff0c;否則很容易造成爆炸。 本題給定一張不相容物品的清單&#xff0c;需要你檢查每一張集裝箱貨品清單&#xff0c;判斷它們是否能裝在同…

C++標準庫之String

C中支持的字符串處理的函數庫叫String&#xff0c;但它不是STL&#xff0c;卻與STL操作十分相似。 1.聲明&#xff1a; 使用String之前要有以下頭文件 #include<string> using namespace std; 聲明方法 string s; //聲明一個string對象 s string s[10]; //聲明一個stri…

652. 尋找重復的子樹

給定一棵二叉樹&#xff0c;返回所有重復的子樹。對于同一類的重復子樹&#xff0c;你只需要返回其中任意一棵的根結點即可。 兩棵樹重復是指它們具有相同的結構以及相同的結點值。 示例 1&#xff1a; 1 / \ 2 3 / / \ 4 2 4 / 4 …

817. 鏈表組件

給定一個鏈表&#xff08;鏈表結點包含一個整型值&#xff09;的頭結點 head。 同時給定列表 G&#xff0c;該列表是上述鏈表中整型值的一個子集。 返回列表 G 中組件的個數&#xff0c;這里對組件的定義為&#xff1a;鏈表中一段最長連續結點的值&#xff08;該值必須在列表 G…

1121 Damn Single (25 分)

"Damn Single (單身狗)" is the Chinese nickname for someone who is being single. You are supposed to find those who are alone in a big party, so they can be taken care of. Input Specification: Each input file contains one test case. For each case,…

1124 Raffle for Weibo Followers (20 分)

John got a full mark on PAT. He was so happy that he decided to hold a raffle&#xff08;抽獎&#xff09; for his followers on Weibo -- that is, he would select winners from every N followers who forwarded his post, and give away gifts. Now you are suppose…

987. 二叉樹的垂序遍歷

給定二叉樹&#xff0c;按垂序遍歷返回其結點值。 對位于 (X, Y) 的每個結點而言&#xff0c;其左右子結點分別位于 (X-1, Y-1) 和 (X1, Y-1)。 把一條垂線從 X -infinity 移動到 X infinity &#xff0c;每當該垂線與結點接觸時&#xff0c;我們按從上到下的順序報告結點的值…

28. 實現 strStr()

實現 strStr() 函數。 給定一個 haystack 字符串和一個 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從0開始)。如果不存在&#xff0c;則返回 -1。 示例 1: 輸入: haystack "hello", needle "ll" 輸出: 2 示例…