日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Leetcode 146. LRU缓存机制 解题思路及C++实现

發布時間:2025/4/16 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode 146. LRU缓存机制 解题思路及C++实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路:

使用一個雙向鏈表存儲最常使用的key value對,最近使用的元素放在鏈表的表頭,鏈表中最后一個元素是使用頻率最低的元素。同時,使用一個map來記錄對應的<key,<key, value>>,用于查找現在的緩存中是否有key及其value。?

?

class LRUCache { public:int n;list<pair<int, int>> lis;map<int, list<pair<int, int>>::iterator> mp;LRUCache(int capacity) {n = capacity; //初始化緩存大小}int get(int key) {int ret = -1;if(mp.find(key) != mp.end()){ // 緩存中已經存在keyauto iter = mp[key];ret = iter->second;lis.erase(iter); //在鏈表中刪除這個key和valuelis.push_front(make_pair(key, ret)); //再把這個key和value放在鏈表的表頭mp[key] = lis.begin(); //同時,要更新map中key所指向鏈表的位置}return ret; //返回value值}void put(int key, int value) {auto iter = mp.find(key); //看看map中是否有這個keyif(iter != mp.end()){ //如果有,則更新這個key在鏈表中的順序,需先刪除,然后再push_front在表頭lis.erase(iter->second);}else if(lis.size() < n){ //如果鏈表中的元素個數小于可緩存數}else{ //list中沒有key,且已超過n個int key = lis.back().first; lis.pop_back(); //擦除最少使用的key value對mp.erase(key); //同時擦除map中對應的元素}lis.push_front(make_pair(key, value));mp[key] = lis.begin();} };/*** Your LRUCache object will be instantiated and called as such:* LRUCache* obj = new LRUCache(capacity);* int param_1 = obj->get(key);* obj->put(key,value);*/

?

?

?

總結

以上是生活随笔為你收集整理的Leetcode 146. LRU缓存机制 解题思路及C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。