題目鏈結運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制。它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。
獲取資料 get(key) - 如果金鑰 (key) 存在於快取中,則獲取金鑰的值(總是正數),否則返回 -1。
寫入資料 put(key, value) - 如果金鑰已經存在,則變更其資料值;如果金鑰不存在,則插入該組「金鑰/資料值」。當快取容量達到上限時,它應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間。
class
lrucache
intget
(int key)
keys.
erase
(locs[key]);
keys.
push_back
(key)
; locs[key]
=--keys.
end();
return datas[key];}
void
put(
int key,
int value)
else
if(cur < capacity)
else
datas[key]
= value;}}
;/**
* 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);
*/
執行結果:通過執行用時 : 588 ms, 在所有 c++ 提交中擊敗了5.03%的使用者
記憶體消耗 : 36.8 mb, 在所有 c++ 提交中擊敗了100.00%的使用者
本道題我使用了乙個map和乙個陣列,map用來記錄key和alue,陣列用來記錄key的位置,並在set和put時做相應的更新。
struct bid_listnode ;}
;class
lrucache
// 插入新的在末尾
void
insert_tail
(bid_listnode* ptr)
public
:lrucache
(int capacity)
intget
(int key)
void
put(
int key,
int value)
else
else}}
};/** * 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);
*/
範例用了鍊錶,使得在做更新時可以減少更新時間。
學渣帶你刷Leetcode146 LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰已經存在,則變更其資料值...
leetcode146 LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...
LeetCode 146 LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料get和 寫入資料put。獲取資料get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料put key,value 如果金鑰不存在,則寫入其資料值。當快取容量...