牛客lru
運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制 。 實現 lrucache 類:
高階:你是否可以在 o(1) 時間複雜度內完成這兩種操作?示例:
輸入 [「lrucache」, 「put」, 「put」, 「get」, 「put」, 「get」, 「put」, 「get」,「get」, 「get」]解法[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1],[3], [4]]
輸出 [null, null, null, 1, null, -1, null, -1, 3, 4]
解釋lrucache lrucache = new lrucache(2);
lrucache.put(1, 1); // 快取是
lrucache.put(2, 2); // 快取是
lrucache.get(1); // 返回 1
lrucache.put(3, 3); // 該操作會使得關鍵字 2 作廢,快取是
lrucache.get(2); // 返回 -1 (未找到)
lrucache.put(4, 4); // 該操作會使得關鍵字 1 作廢,快取是
lrucache.get(1); // 返回 -1 (未找到)
lrucache.get(3); // 返回 3
lrucache.get(4); // 返回 4
class
lrucache
}class
doublelist
else
size++;}
// 刪除鍊錶中的 x 節點(x 一定存在)
// 由於是雙鏈表且給的是目標 node 節點,時間 o(1)
public
void
remove
(node x)
else
if(head==x)
else
if(tail==x)
else
size--;}
// 刪除鍊錶中最後乙個節點,並返回該節點,時間 o(1)
public node removelast()
// 返回鍊錶長度,時間 o(1)
public
intsize()
}private hashmap
map;
private doublelist doublelist;
private
int capacity=0;
public
lrucache
(int capacity)
public
intget
(int key)
else
}public
void
put(
int key,
int value)
else
doublelist.
addfirst
(x);
map.
put(key,x);}
}}
LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...
LRU快取機制
運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...
LRU快取機制
lru快取機制 最近最少使用 雙向鍊錶 雜湊表 不使用自帶 linkedhashmap 雙向鍊錶按照被使用的順序儲存了這些鍵值對,靠近頭部的鍵值對是最近使用的,而靠近尾部的鍵值對是最久未使用的。雜湊錶即為普通的雜湊對映 hashmap 通過快取資料的鍵對映到其在雙向鍊錶中的位置。首先使用雜湊表進行定...