zoukankan      html  css  js  c++  java
  • LRU Cache [LeetCode]

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

    get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
    set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

    Solution: 

     1 class LRUCache{
     2 public:
     3     vector<int> keys;
     4     unordered_map<int, int> map;
     5     int size = 0;
     6     LRUCache(int capacity) {
     7         size = capacity;
     8     }
     9     
    10     void adjust(int key){
    11         int idx = -1;
    12         for(int i = keys.size() - 1; i >= 0 ; i --)
    13             if(keys[i] == key){
    14                 idx = i;
    15                 break;
    16             }
    17         
    18         if(idx == -1)
    19             return;
    20             
    21         keys.erase(keys.begin() + idx);
    22         keys.push_back(key);
    23     }
    24     
    25     int get(int key) {
    26         if(map.find(key) == map.end()){
    27             return -1;
    28         }else{
    29             adjust(key);
    30             return map[key];
    31         }
    32     }
    33     
    34     void set(int key, int value) {
    35         if(map.find(key) != map.end()){
    36             map[key] = value;
    37             adjust(key);
    38             return;
    39         }
    40         
    41         if(keys.size() >= size ){ 
    42             int key_to_erase = keys[0];
    43             keys.erase(keys.begin());
    44             map.erase(key_to_erase);
    45         }
    46     
    47         keys.push_back(key);
    48         map[key] = value;
    49     }
    50 };
  • 相关阅读:
    网页的摘要信息
    自我介绍
    DIV和SPAN的区别
    软件工程简介
    设置层的漂移
    构建之法现代软件工程
    手机验证码的相关知识
    Python2和Python3的区别
    我的第一个练习
    结对编程后传之做汉堡
  • 原文地址:https://www.cnblogs.com/guyufei/p/3428667.html
Copyright © 2011-2022 走看看