leetcode 146 LRUキャッシュメカニズム

タイトル

あなたの処分のデータ構造、デザインを使用して(最低使用)LRUキャッシュメカニズムを実装します。これは、次の機能をサポートする必要があります。データを取得し、置く取得するデータを書き込みます。
データをゲットする(キー) - (キー)キーがキャッシュに存在する場合、キー(常に正)の取得価額、そうでない場合は-1。
(キー、値)入れてデータを書き込み-鍵は、書き込まれたデータの値が存在しない場合。キャッシュ容量の上限に達した場合、それは新しいデータ値のための余地を作るために新しいデータを書き込む前に、最低使用するデータ値を削除する必要があります。
高度:
あなたはO(1)時間複雑に両方の操作を行うことができますか?
 

C ++コード

クラスLRUCache {
 パブリック
    LRUCache(INTの容量){ 
        キャップ = 容量。
    } 
    
    INT  GETINT キー){ 
        オートそれ = 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->置く(キー、値); 
 * /

 

おすすめ

転載: www.cnblogs.com/xumaomao/p/11359692.html