码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 146 LRU 缓存机制

时间:2021-05-24 13:58:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:leetcode   efault   key   erase   ras   val   auto   实现   extends   

简介

使用了C++自带的实现deque 和 unordered_map

code

class LRUCache {
public:
    unordered_map<int, bool> map;
    unordered_map<int, int> mapV;
    deque<int> q;
    int capacity;
    LRUCache(int capacity) {
        this->capacity = capacity;
    }
    
    int get(int key) {
        if(map[key]){
            for(auto it=q.begin(); it != q.end(); it++){
                if(*it == key){
                    q.erase(it);
                    break;
                }
            }
            // if(q.size() == capacity) {
            //     map[q.front()] = false;
            //     q.pop_front();
            // }
            q.push_back(key);
            map[key] = true;

            return mapV[key];
        }
        return -1;
    }
    
    void put(int key, int value) {
        if(map[key]) {
            mapV[key] = value;
            for(auto it=q.begin(); it != q.end(); it++){
                if(*it == key){
                    q.erase(it);
                    break;
                }
            }
            q.push_back(key);
        }else{
            if(q.size() == capacity){
                map[q.front()] = false;
                q.pop_front();
            }
            q.push_back(key);
            map[key] = true;
            mapV[key] = value;
        }
    }
};

/**
 * Your LRUCache object will be instantiated and called as such:
 * LRUCache* obj = new LRUCache(capacity);
 * int param_1 = obj->get(key);
 * obj->put(key,value);
 */
class LRUCache extends LinkedHashMap<Integer, Integer>{
    private int capacity;
    
    public LRUCache(int capacity) {
        super(capacity, 0.75F, true);
        this.capacity = capacity;
    }

    public int get(int key) {
        return super.getOrDefault(key, -1);
    }

    public void put(int key, int value) {
        super.put(key, value);
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
        return size() > capacity; 
    }
}

java 直接 使用了LinkedHashMap 然后 重载了removeEldestEntry函数, 对于输入的, 如果个数大于设定的容量将会删除.
java这个也太作弊了, 不过一般也很少有人会记住 LinkedHashMap这个名字.
还有removeEldestEntry这个名字.

leetcode 146 LRU 缓存机制

标签:leetcode   efault   key   erase   ras   val   auto   实现   extends   

原文地址:https://www.cnblogs.com/eat-too-much/p/14778166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!