1. 程式人生 > >LeetCode 146. LRU快取機制(java實現)

LeetCode 146. LRU快取機制(java實現)

參考解答

總結:這道題主要要知道選取何種資料結構並且在 O(1) 時間複雜度內完成這兩種操作?

O(1) 的get方法肯定要用到HashMap()

LinkedList(雙向連結串列)可以以O(1)時間複雜度,很方便地實現資料的插入和刪除

所以,將兩個資料結構聯合使用,HashMap中的(key,value)儲存的是(key,Node);

Node中儲存的資料是雙向連結串列節點資訊,包括key,value,pre,next;

主要演算法步驟:

1.如果是get方法,但成功使用get時,get對應的節點修改為最前邊的節點;

2.如果是set方法,先要判斷快取裡是否有key對應的值,有了就要刪除

                             在判斷快取的大小是否超過的容量大小,如果超過了,把新資料加進去,還有把最後的節點刪除