作業系統lru演算法 每天一道高頻題 LRU快取機制

2021-10-11 23:50:17 字數 1296 閱讀 9553

題目:

lru(least recently used):最近最少使用,最近最久未使用,是作業系統常用的,是作業系統常用的一種頁面置換演算法,選擇最近最久未使用的頁面予以淘汰

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

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

寫入資料put(key,value),如果金鑰不存在,則寫入其資料值,當快取容量達到上限時,他應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間

高階:你是否可以在o(1)時間複雜度內完成這兩種操作

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

lrucache的常見實現方式是:雜湊表+雙向鍊錶

思路:lrucache的設計

**

1public class lrucache 1718    public int get(int key) 2728    /**29     * @param node 將node節點插入到first節點的後面30     */31    private void addafterfirst(node node) 4041    /**42     * @param node 從雙向鍊錶中刪除node節點43     */44    private void removenode(node node) 4849    public void put(int key, int value)  else 61            map.put(key, node = new node(key, value));62        }63        addafterfirst(node);64    }6566    private static class node 7677        public node() 79    }80}

每天一道演算法題

no.1 棧是特殊的線性表,它。a.對 b.錯答案 錯,它的插入和刪除都是在同一端進行的。no.2 n個葉子節點的滿二叉樹 除了葉子節點,每個節點都有兩個孩子 總共有多少個節點?a.2n 1 b.2n c.n 1 d.n答案 a 滿二叉樹我們講過了,度為0的節點比度為2的加點多乙個。滿二叉樹是特殊的...

每天一道演算法題

1.給定乙個只包括 的字串,判斷字串是否匹配。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。思路 正確思路 不需要考慮輸入內容是否合法,這只是做題,不是工程 定義乙個字典,後括號為鍵,前半部分為值 定義乙個元素儲存棧頂,注意這個設定,取棧...

每天一道演算法題

1 js計算某個字串出現的次數 j ascript計算乙個字串最多重複的字元及出現次數.var str zhaochucichuzuiduodezifu var o for var i 0,length str.length i length i else console.log o 輸出的是完整的...