zoukankan      html  css  js  c++  java
  • leetcode146 LRU Cache

    思路:

    使用unordered_map和list实现O(1)的put和get。

    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 class LRUCache
     5 {
     6 public:
     7     
     8     int c;
     9     list<int> l; // list of key
    10     unordered_map<int, pair<int, list<int>::iterator>> mp; // <key, <value, it>>
    11 
    12     LRUCache(int capacity) { c = capacity; }
    13     
    14     int get(int key)
    15     {
    16         if (!mp.count(key)) return -1;
    17         l.erase(mp[key].second);
    18         l.push_front(key);
    19         mp[key].second = l.begin();
    20         return mp[key].first;
    21     }
    22     
    23     void put(int key, int value)
    24     {
    25         if (mp.count(key))
    26         {
    27             l.erase(mp[key].second);
    28             mp.erase(key);
    29         }
    30         else if (l.size() == c)
    31         {
    32             mp.erase(l.back());
    33             l.pop_back();
    34         }
    35         l.push_front(key);
    36         mp[key] = make_pair(value, l.begin());
    37     }
    38 };
    39 
    40 int main()
    41 {
    42     LRUCache* obj = new LRUCache(2);
    43     obj->put(1, 1);
    44     obj->put(2, 2);
    45     cout << obj->get(1) << endl;
    46     obj->put(3, 3);
    47     cout << obj->get(2) << endl;
    48     obj->put(4, 4);
    49     cout << obj->get(1) << endl;
    50     cout << obj->get(3) << endl;
    51     cout << obj->get(4) << endl;
    52     return 0;
    53 }
  • 相关阅读:
    Beta 冲刺 (5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    BETA 版冲刺前准备
    Alpha事后诸葛(团队)
    设计模式——访问者模式
    设计模式——命令模式
  • 原文地址:https://www.cnblogs.com/wangyiming/p/11161490.html
Copyright © 2011-2022 走看看