题解 | #设计LRU缓存结构#

设计LRU缓存结构

https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

class Solution {
public:
 Solution(int capacity){
 // write code here
    capacity_ = capacity;
 }
 
 int get(int key) {
 // write code here
    auto it = mp_.find(key);
    if (it == mp_.end()) {
        return -1;
    }
    int v = (it->second)->second;
    value_.erase(it->second);
    mp_.erase(key);
    value_.push_front({key, v});
    mp_[key] = value_.begin();

    return v;
 }
 
 void set(int key, int value){
 // write code here
    auto it = mp_.find(key);
    if (it == mp_.end()) {
        if (value_.size() < capacity_) {
            value_.push_front({key, value});
            mp_[key] = value_.begin();
        } else {
            auto it = value_.back();
            mp_.erase(it.first);
            value_.pop_back();
            
            value_.push_front({key, value});
            mp_[key] = value_.begin();
        }
    } else {
        value_.erase(it->second);
        value_.push_front({key, value});
        mp_[key] = value_.begin();
    }
 }

private:
    int capacity_ = 0;
    std::map<int, std::list<std::pair<int, int>>::iterator> mp_;
    std::list<std::pair<int, int>> value_;
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* solution = new Solution(capacity);
 * int output = solution->get(key);
 * solution->set(key,value);
 */

全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务