經典演算法面試題 LRU快取

2021-10-07 18:54:26 字數 1175 閱讀 8182

設計和構建乙個「最近最少使用」快取,該快取會刪除最近最少使用的專案。快取應該從鍵對映到值(允許你插入和檢索特定鍵對應的值),並在初始化時指定最大容量。當快取被填滿時,它應該刪除最近最少使用的專案。

它應該支援以下操作: 獲取資料 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 可以用...