146 LRU快取機制

2021-09-24 06:06:22 字數 1893 閱讀 9381

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

我的** 160ms

static int x=()();

struct node//在map中x為value ,y為index set中x為key ,y為index

; node(int i,int j)

friend bool operator<(const node &n1,const node &n2)

void deal(unordered_map::iterator &it1,int key, int value)

int get(int key)

else

return -1;

}void put(int key, int value)

if(count==capacity)

node n2(key,index);

s.insert(n2);

node n3(value,index);

m[key]=n3;

index++;

count++;

}};/**

* 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);

*/

最優** 140ms

class lrucache 

int get(int key)

void put(int key, int value)

if (dic.size() == cap)

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

dic[key] = l.begin();

}private:

int cap;

list> l;

unordered_map>::iterator> dic;

};/**

* 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);

*/

146 LRU快取機制

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

146 LRU快取機制

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

146 LRU快取機制

參考 官方解答 主要思路 需要字典實現快速查詢,同時需要保證一定的順序。帶頭尾節點的雙向鍊錶可以實現快速刪除和新增頭尾節點。因為節點的屬性包括前乙個節點和後乙個節點,即使是中間的節點也可以實現快速刪除。思路1 使用ordereddict實現 可參考 python ordereddict 詳解 時間複...