設計和構建乙個「最近最少使用」快取,該快取會刪除最近最少使用的專案。快取應該從鍵對映到值(允許你插入和檢索特定鍵對應的值),並在初始化時指定最大容量。當快取被填滿時,它應該刪除最近最少使用的專案。
它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。
獲取資料 get(key) - 如果金鑰 (key) 存在於快取中,則獲取金鑰的值(總是正數),否則返回 -1。
寫入資料 put(key, value) - 如果金鑰不存在,則寫入其資料值。當快取容量達到上限時,它應該在寫入新資料之前刪除最近最少使用的資料值,從而為新的資料值留出空間。
示例: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
hash+雙向鍊錶
class lrucache ;
public listnode(int key, int val)
}mapmap = new hashmap<>();
listnode head;
listnode tail;
int size;
int capacity;
public lrucache(int capacity)
public int get(int key)
private void movetohead(listnode node)
private void remove(listnode node)
private void add(listnode node)
public void put(int key, int value)
}else
}}
面試題 LRU演算法及編碼實現LRU策略快取
lru least recently used 就是將最近不被訪問的資料給淘汰掉,lru基於一種假設 認為最近使用過的資料將來被使用的概率也大,最近沒有被訪問的資料將來被使用的概率比較低。lru一般通過鍊錶形式來存放快取資料,新插入或被訪問的資料放在鍊錶頭部,超過一定閾值後,自動淘汰鍊錶尾部的資料。...
面試題 16 25 LRU 快取
設計和構建乙個 最近最少使用 快取,該快取會刪除最近最少使用的專案。快取應該從鍵對映到值 允許你插入和檢索特定鍵對應的值 並在初始化時指定最大容量。當快取被填滿時,它應該刪除最近最少使用的專案。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存...
經典演算法面試題
1 說是有乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前十個詞。先用雜湊,統計每個詞出現的次數,然後用在n個數中找出前k大個數的方法找出出現次數最多的前10個詞。2 如題1,但是這次檔案特別大,沒有辦法一次讀入記憶體。1 直接排序,寫檔案時,同時寫入字串及其出現次數。2 可以用...