牛客NC93 設計LRU快取結構

2021-10-24 03:41:43 字數 1251 閱讀 2928

設計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,接下來兩個...