[本題鏈結]
題目描述設計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,接下來乙個整數x,表示get(x),若x未出現過或已被移除,則返回-1 對於每個操作2,輸出乙個答案
示例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)變為最不常使用的記錄』
本題是乙個模擬lru快取結構的問題,lru也是在選擇題中經常出現的考點,首先要明白lru的機制,即最近最少使用,是一種常用的頁面置換演算法,選擇最近最久未使用的頁面予以淘汰。
解題思路
首先本題考查了對於常用知識點的考查,我們要明白lru演算法的呼叫機制,然後分析題意,來實現其set和get方法。
1.通過觀察輸入的測試用例,我們可以看出其,二維陣列中每一行第乙個元素表示的是要呼叫的方法,「1」為set,"2"為get.
2.set方法實現,我們可以通過題目描述觀察出其傳參模式為key,value模型,我們可聯想到通過關聯式容器map來進行管理。
set的實現原理,若set中的key在原來lru中存在,則直接刪除,插入新的key,value。
當呼叫set方法時,觸發了一次lru,lru結構通過鍊錶管理,當達到大小k時,最少被使用,也就是鍊錶尾部將被刪除,其在map上的節點對應刪除,最近使用key,value被插值鍊錶頭部,map中插入新的key,value。
3.get方法實現,我們通過其對應的可以key找到對應的value,如果找不到則返回-1,若存在則輸出其key對應的value。
呼叫get方法,也觸發一次lru,則刪除lru中原來位置的key,value,由於被使用,則其插入到鍊錶頭部。
#include
class
solution
else
if(opt[0]
==2)}
return res;
}void
set(
int key,
int value)
if(l.
size()
== caps)
l.push_front()
; maps[key]
= l.
front()
.second;
return;}
void
get(
int key)
l.remove()
; l.
push_front()
; res.
push_back
(maps[key]);
return;}
private
:int caps;
unordered_map<
int,
int> maps;
listint,
int>> l;
vector<
int> res;
};
注意鍊錶這裡使用remove,remove傳值刪除,要區別與erase傳迭代器刪除。 牛客刷題 設計LRU快取結構
題目 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。若opt 1,接下來兩個...
牛客NC93 設計LRU快取結構
設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。若opt 1,接下來兩個整數x...
牛客網 高頻面試題 設計LRU快取結構
設計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 還是最不常用的 ...