直接利用map写会超时......参考大佬意见后,用C++写出这个题解,虽然效率也不是很高,但,emmm,通过了

#include<unordered_map>
using namespace std;
struct NodeList {
        int key, val;
        NodeList* pre;
        NodeList* next;
        NodeList() {
            key = 0; val = 0;
            pre = nullptr;
            next = nullptr;
        }
        NodeList(int key1, int val1) {
            val = val1;
            key = key1;
            pre = nullptr;
            next = nullptr;
        }
};
class Solution {
private:
    unordered_map<int, NodeList* >Unmap;
    NodeList* head;
    NodeList* tail;
    int n = 0;
    int cap;
public:
    /**
     * lru design
     * @param operators int整型vector<vector<>> the ops
     * @param k int整型 the k
     * @return int整型vector
     */
    vector<int> ans;
    vector<int> LRU(vector<vector<int> >& operators, int k) {
        // write code hereint i;
        if (k < 1)
            return {};
        this->cap = k;
        head = new NodeList();
        tail = new NodeList();
        head->next = tail;
        tail->pre = head;
        int m = operators.size();
        if (m == 0)
            return {};
        for (int i = 0; i < m; i++) {
            if (operators[i][0] == 1)
                put(operators[i][1], operators[i][2]);
            if (operators[i][0] == 2)
                get(operators[i][1]);
        }
        return ans;
    }
void Remove(NodeList* node) {//移除结点
    node->pre->next = node->next;
    node->next->pre = node->pre;
}
NodeList* RemoveTail() {//如果数据数目超过限定,移除尾结点的前驱结点
    NodeList* node = tail->pre;
    Remove(node);
    return node;
}
void AddToHead(NodeList* node) {//将新结点加到头节点之后
    node->next = head->next;
    head->next->pre = node;
    head->next = node;
    node->pre = head;
}
void MoveToHead(NodeList* node) {//将最近使用过的最新的结点移到头结点之后
    Remove(node);//将结点从原位置移除
    AddToHead(node);
}
void get(int key) {
    if (!Unmap.count(key))//如果不存在,则将-1放入ans中
        ans.push_back(-1);
    else {
        MoveToHead(Unmap[key]);//查找到则更新为最新的结点
        ans.push_back(Unmap[key]->val);
    }
}
void put(int key, int val1) {
    if (Unmap.find(key) != Unmap.end()) {//查找到,则将val值更改
        Unmap[key]->val = val1;
        MoveToHead(Unmap[key]);
    }
    else {
        NodeList* node = new NodeList(key, val1);
        Unmap[key] = node;
        AddToHead(node);
        n++;
    }
    if (n > cap) {//数据数目超过限制
        NodeList* removed = RemoveTail();
        Unmap.erase(removed->key);//将Unmap中的key值移除
        delete removed;
        n--;
    }
}
};