運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制 。解題思路:利用雙向鍊錶,可以在o(1)的時間內完成末尾的刪除。實現 lrucache 類:
lrucache(int capacity) 以正整數作為容量 capacity 初始化 lru 快取
int get(int key) 如果關鍵字 key 存在於快取中,則返回關鍵字的值,否則返回 -1 。
void put(int key, int value) 如果關鍵字已經存在,則變更其資料值;如果關鍵字不存在,則插入該組「關鍵字-值」。當快取容量達到上限時,它應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間。
leetcode
雙向鍊錶的建立思想:雙向鍊錶
class
lrucache
public
intget
(int key)
int val = map.
get(key)
.val;
put(key, val)
;return val;
}public
void
put(
int key,
int value)
else
cache.
addfirst
(x);
map.
put(key, x);}
}}class
node
}class
doublelist
// 在鍊錶頭部新增節點 x
public
void
addfirst
(node x)
// 刪除鍊錶中的 x 節點(x 一定存在)
public
void
remove
(node x)
// 刪除鍊錶中最後乙個節點,並返回該節點
public node removelast()
// 返回鍊錶長度
public
intsize()
}
演算法 模擬LRU機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制 實現 lrucache 類 lrucache int capacity 以正整數作為容量 capacity 初始化 lru 快取 int get int key 如果關鍵字 key 存在於快取中,則返回關鍵字的值,否則返回 1 ...
演算法 LRU 146 LRU快取機制
設計和實現乙個lru 最近最少使用 快取資料結構,使它應該支援以下操作 get和put。get key 如果金鑰存在於快取中,則獲取金鑰的值 值總是正數 否則返回 1。put key,value 如果金鑰不存在,請設定或插入值。當快取達到其容量時,它應該在插入新專案之前使最近最少使用的專案作廢。後續...
LRU快取機制演算法實現
就是一種快取淘汰策略。計算機的快取容量有限,如果快取滿了就要刪除一些內容,給新內容騰位置。但問題是,刪除哪些內容呢?我們肯定希望刪掉哪些沒什麼用的快取,而把有用的資料繼續留在快取裡,方便之後繼續使用。那麼,什麼樣的資料,我們判定為 有用的 的資料呢?lru 快取淘汰演算法就是一種常用策略。lru 的...