LEETCODE146 LRU快取機制

2021-10-06 16:44:49 字數 1041 閱讀 5798

一、題目描述

運用你所掌握的資料結構,設計和實現乙個  lru (最近最少使用) 快取機制。它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。

獲取資料 get(key) - 如果關鍵字 (key) 存在於快取中,則獲取關鍵字的值(總是正數),否則返回 -1。

寫入資料 put(key, value) - 如果關鍵字已經存在,則變更其資料值;如果關鍵字不存在,則插入該組「關鍵字/值」。當快取容量達到上限時,它應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間。

二、解題思路

lru 最近最少使用演算法,可以採用佇列的資料結構(採用雙端佇列,便於刪除節點),對於乙個新入隊元素,如果佇列中存在該元素,則把該元素從佇列中刪除,插入隊頭,如果佇列中不存在,判斷佇列是否已經滿,如果已滿,則從隊尾刪除乙個元素,在隊頭插入新元素。如果未滿,則直接在隊頭插入該元素。為了提公升元素效率,可以引入hash表,詳見**。

class lrucache 

public dlinknode(int _key,int _value)

}private dlinknode head,tail;

private mapcached;

private int size;

private int capacity;

public lrucache(int capacity)

public int get(int key)

movetohead(node);

return node.value;

}public void put(int key, int value)

}else

}private void addtohead(dlinknode node)

private void removenode(dlinknode node)

private void movetohead(dlinknode node)

private dlinknode removefromtail()

}

學渣帶你刷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 如果金鑰不存在,則寫入其資料值。當快取容量...