Leetcode LRU快取機制

2021-09-27 12:18:10 字數 1104 閱讀 3048

運用你所掌握的資料結構,設計和實現乙個 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

class lrucache 

int get(int key)

void put(int key,int value)

l.push_front(make_pair(key,value));

m[key]=l.begin();

} private:

int cap;//lru size

list>l;//pairunordered_map>::iterator>m;//unordered_map};

/** * 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 LRU快取機制

lru least recently used 最後思路 使用了linkedhashmap這個資料結構,它本身可以按訪問順序排序並且將剛剛訪問過的資料放在尾部。class lrucache public int get int key public void put int key,int valu...

LeetCode LRU快取機制

使用雙向鍊錶來表示最久未使用的結點,最久未使用的結點放在了尾部 使用雜湊表來存放真正的資料 容量 int size 實際大小,當size超過capacity時,刪除最久未使用的結點 mapcache newhashmap 雜湊表用來存放真正的資料 dlinkednode head,tail 新增首尾...

leetcode LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果關鍵字 key 存在於快取中,則獲取關鍵字的值 總是正數 否則返回 1。寫入資料 put key,value 如果關鍵字已經存在,則變更其...