Leetcode LRU快取機制

2021-09-02 23:19:20 字數 640 閱讀 4173

lru(least recently used)

最後思路:使用了linkedhashmap這個資料結構,它本身可以按訪問順序排序並且將剛剛訪問過的資料放在尾部。

class lrucache };}

public int get(int key)

public void put(int key, int value)

}

之前幾個思路:

1.使用佇列(先進先出):維護乙個類似handler裡messagequeue(按執行時間從小到大)那樣的佇列,元素為entry型別,不同的是這次佇列的順序按最近訪問進行排序。便於插入新節點(隊首),但查詢訪問最差o(n),移動元素耗時。

2.使用雙向鍊錶+hashmap:這樣做在put和get的時候時間複雜度為o(1)。它的原理是這樣的——結合兩種資料結構的優點,map在查詢資料時速度十分快o(1)所以用在get()操作很合適,雙向鍊錶在插入元素和刪除元素的效率上都比較高,比起單鏈表,雙向鍊錶的優勢就是刪除不需要去找前乙個,如果使用覆蓋的話雖然也是o(1)時間複雜度,但無法釋放空間記憶體。所以雙向鍊錶非常適合put()操作。最終,我們在put中以傳入的velue作為hashmap的key,以node型別為hashmap的value,傳入的key作為node的成員值。

Leetcode LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...

LeetCode LRU快取機制

使用雙向鍊錶來表示最久未使用的結點,最久未使用的結點放在了尾部 使用雜湊表來存放真正的資料 容量 int size 實際大小,當size超過capacity時,刪除最久未使用的結點 mapcache newhashmap 雜湊表用來存放真正的資料 dlinkednode head,tail 新增首尾...

leetcode LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果關鍵字 key 存在於快取中,則獲取關鍵字的值 總是正數 否則返回 1。寫入資料 put key,value 如果關鍵字已經存在,則變更其...