[LeetCode OJ] LRU Cache 解题报告

题目地址:https://oj.leetcode.com/problems/lru-cache/

题意:LRU是Least Recently Used 近期最少使用算法。内存管理的一种页面置换算法

解题思路:没什么特别的地方,用STL的map和list处理就好了,map用来记录pair<int,list<node>::iterator>,key值映射到list中的节点。

#include<iostream>
using namespace std;
class node{
    public:
        int key,val;
        node(int k,int v):key(k),val(v){}
};

class LRUCache{
    map<int,list<node>::iterator> mp;
    map<int,list<node>::iterator>::iterator it;
    list<node> List;
    list<node>::iterator List_it;
    int size;
public:
    LRUCache(int capacity) {
        size = capacity;
    }

    int get(int key) {
        it = mp.find(key);
        if(it == mp.end())
            return -1;
        node tmp(key,it->second->val);
        List.erase(it->second);
        List.push_back(tmp);
        List_it = List.end();
        --List_it;
        mp[key]=List_it;
        return tmp.val;
    }

    void set(int key, int value) {
        node tmp(key,value);
        it = mp.find(key);
        if(it == mp.end()){
            List.push_back(tmp);
            List_it = List.end();
            --List_it;
            mp[key]=List_it;
        }
        else{
            List.erase(it->second);
            List.push_back(tmp);
            List_it = List.end();
            --List_it;
            mp[key]=List_it;
        }
        while(List.size()>size){
            node tmp2 = List.front();
            mp.erase(tmp2.key);
            List.pop_front();
        }
    }
};
点赞