題目:首先分析題目中要求實現的兩個操作,get和set,這裡可以直接使用hashmap進行實現,不過這裡對快取區(map)的大小有限制,所以後面需要進行限制,分情況處理,有空間或者是執行更新操作時,直接set,空間不足時則需要先刪除後set,刪除則是根據lru演算法的最近最少使用進行確定。lru演算法的最近最少使用,可以設計乙個輔助類,類包含key和time兩個字段,time從0開始遞增,每次操作key時更新time的值來模擬時間,將所有的操作資訊放到list中,在進行刪除的時候對list降序排序,取最後的乙個的key,在list和map中進行刪除即可。設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能
[要求]
set和get方法的時間複雜度為o(1)
某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。
當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。
若opt=1,接下來兩個整數x, y,表示set(x, y)
若opt=2,接下來乙個整數x,表示get(x),若x未出現過或已被移除,則返回-1
對於每個操作2,輸出乙個答案。
輸入:[[1,1,1],[1,2,2],[1,3,2],[2,1],[1,4,4],[2,2]],3
輸出:[1,-1]
完整**如下:
class usetimes
public static int lru (int operators, int k)
});int leasttuse = uselist.get(uselist.size()-1).key;
map.remove(leasttuse);
uselist.remove(uselist.size()-1);
map.put(operators[i][1], operators[i][2]);
usetimes use = new usetimes();
use.key = operators[i][1];
use.time = count++;
uselist.add(use);
}}else if(symbol==2) else }}
}} int ans = new int[res.size()];
for(int i=0;ireturn ans;
}
牛客NC93 設計LRU快取結構
設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。若opt 1,接下來兩個整數x...
牛客題霸 研發 NC93 設計LRU快取結構
本題鏈結 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key...
牛客 設計LRU快取結構(map和鍊錶)
本題鏈結 題目描述設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個...