每天1題演算法題(11) LRU快取機制

2022-07-10 00:51:12 字數 926 閱讀 5533

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

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

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

示例:

解方法一:雜湊表 + 雙向鍊錶

雙向鍊錶按照被使用的順序儲存了這些鍵值對,靠近頭部的鍵值對是最近使用的,而靠近尾部的鍵值對是最久未使用的。

雜湊錶即為普通的雜湊對映(hashmap),通過快取資料的鍵對映到其在雙向鍊錶中的位置。

class

lrucache

public dlinkednode(int _key, int _value)

}public lrucache(int

capacity)

public

int get(int

key)

else

}public

void put(int key, int

value)

} else

}private

void

addtohead(dlinkednode node)

private

void

movetohead(dlinkednode node)

private

dlinkednode removetail()

}

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

題目 lru least recently used 最近最少使用,最近最久未使用,是作業系統常用的,是作業系統常用的一種頁面置換演算法,選擇最近最久未使用的頁面予以淘汰 運用你所掌握的資料結構,設計和實現乙個lru 最近最少使用 快取機制,它應該支援以下操作 獲取資料get和寫入資料put 獲取資...

每天1題演算法題(1) 二叉樹的中序遍歷

給定乙個二叉樹,返回它的中序 遍歷。輸入 1,null,2,3 1 2 3輸出 1,3,2 1.最簡單也是最直接的,直接用遞迴演算法實現 class solution public void dfs treenode root,list list dfs root.left,list list.ad...

每天一道演算法題1(StrToInt)

題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如 輸入字串 345 則輸出整數345。完成函式strtoint,實現字串轉換成整數的功能。分析 首先我們分析如何完成基本功能,即如何把表示整數的字串正確地轉換成整數。還是以 345 作為例子。當我們掃瞄到字串的第乙個字元 3 時,我們不知道...