設計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,輸出乙個答案
首先用unordered_map來記錄key-value鍵值對,由於要進行移動,所以用陣列來模擬鍊錶。用乙個vector儲存key的值,並再用雜湊表記錄key在陣列中的下標。現在針對這兩個操作:set(x, y),先記錄一下mp[x] = y,然後將x壓入陣列尾部,並記錄一下key值對應陣列的下標。如果元素大於k,那麼就將頭部元素清空,l指向陣列中第乙個合法元素的下標。
2.get(x),先判斷一下-1的情況,然後找到陣列中key的位置,然後將其壓入尾部表示最近使用,再將原來的位置清空(值<=2e9,所以我將其設定成2e9+1表示非法)
#include
class
solution
}else
//get
res.
push_back
(mp[operators[i][1
]]);
int id = pos[operators[i][1
]]; v.
push_back
(v[id]);
++r;
v[id]
=2e9+1
;if(l == id)
//l指向陣列中第乙個合法元素的下標}}
return res;}}
;
當然用list來做更加方便
#include
class
solution
}else
//get
res.
push_back
(mp[v[1]
]); lt.
remove
(v[1])
;//刪除key值
lt.push_back
(v[1])
;}}return res;}}
;
NC93 設計LRU快取結構
知識點 雜湊表 鍊錶 題目鏈結 題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。當快取的大小超過k時,移除最不經常使用的記錄,即set或ge...
牛客題霸 研發 NC93 設計LRU快取結構
本題鏈結 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key...
牛客刷題 設計LRU快取結構
題目 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key的記錄成了最常使用的。當快取的大小超過k時,移除最不經常使用的記錄,即set或get最久遠的。若opt 1,接下來兩個...