タイトル
あなたの処分のデータ構造、デザインを使用して(最低使用)LRUキャッシュメカニズムを実装します。これは、次の機能をサポートする必要があります。データを取得し、置く取得するデータを書き込みます。
データをゲットする(キー) - (キー)キーがキャッシュに存在する場合、キー(常に正)の取得価額、そうでない場合は-1。
(キー、値)入れてデータを書き込み-鍵は、書き込まれたデータの値が存在しない場合。キャッシュ容量の上限に達した場合、それは新しいデータ値のための余地を作るために新しいデータを書き込む前に、最低使用するデータ値を削除する必要があります。
(キー、値)入れてデータを書き込み-鍵は、書き込まれたデータの値が存在しない場合。キャッシュ容量の上限に達した場合、それは新しいデータ値のための余地を作るために新しいデータを書き込む前に、最低使用するデータ値を削除する必要があります。
高度:
あなたはO(1)時間複雑に両方の操作を行うことができますか?
C ++コード
クラスLRUCache { パブリック: LRUCache(INTの容量){ キャップ = 容量。 } INT GET(INT キー){ オートそれ = map1.find(キー)。 もし(それ== map1.end()) のリターン - 1 。 list1.splice(list1.begin()、LIST1、それ - > 秒)。 返す IT-> 2次> 二; } 無効プット(int型のキー、int型の値){ オートそれ= map1.find(キー)。 もし(!それ= map1.end()) { list1.erase(それ - > 秒)。 } であれば(list1.size()== キャップ) { int型 > - K = list1.rbegin();第一 list1.pop_back(); map1.erase(K)。 } list1.push_front(make_pair(キー、値))。 MAP1 [キー] = list1.begin()。 } プライベート: int型のキャップ。 リスト <ペア< int型、int型 >> リスト1。 unordered_map < int型、リスト<ペア< int型、int型 >> ::イテレータ> MAP1。 }。 / * * *あなたのLRUCacheオブジェクトがインスタンス化され、などと呼ばれます: * LRUCache * OBJ =新しいLRUCache(容量); * int型PARAM_1 = obj->(キー)を取得します。 * obj->置く(キー、値); * /