华为题:LRU 缓存

请你设计并实现一个满足 LRU(最近最少使用)缓存约束的数据结构。

实现 LRUCache 类:

  • LRUCache(int capacity):以正整数 capacity 初始化 LRU 缓存。

  • int get(int key):如果关键字 key 存在于缓存中,则返回其值,否则返回 -1。

  • void put(int key, int value):如果关键字 key 已存在,则变更其值为 value;如果不存在,则插入该键值对。如果插入导致容量超出,则逐出最久未使用的关键字。

输入描述

第一行输入一个整数 capacity。

第二行输入一个整数 m,表示操作次数。

接下来 m 行,每行输入一个操作:

  • get key

  • put key value

输出描述

对于每个 get 操作,输出查询结果。

示例 1

输入

text

复制代码
2
5
put 1 1
put 2 2
get 1
put 3 3
get 2

输出

text

复制代码
1
-1

C++ 解法

cpp

复制代码
#include <bits/stdc++.h>
using namespace std;

class LRUCache {
private:
    int cap;
    list<pair<int,int>> cache;
    unordered_map<int, list<pair<int,int>>::iterator> mp;

public:
    LRUCache(int capacity) : cap(capacity) {}

    int get(int key) {
        if (!mp.count(key)) return -1;

        auto it = mp[key];
        int value = it->second;

        cache.erase(it);
        cache.push_front({key, value});
        mp[key] = cache.begin();

        return value;
    }

    void put(int key, int value) {
        if (mp.count(key)) {
            cache.erase(mp[key]);
        } else if ((int)cache.size() >= cap) {
            int oldKey = cache.back().first;
            cache.pop_back();
            mp.erase(oldKey);
        }

        cache.push_front({key, value});
        mp[key] = cache.begin();
    }
};

int main() {
    int capacity;
    cin >> capacity;

    int m;
    cin >> m;

    LRUCache lru(capacity);

    while (m--) {
        string op;
        cin >> op;

        if (op == "get") {
            int key;
            cin >> key;
            cout << lru.get(key) << endl;
        } else if (op == "put") {
            int key, value;
            cin >> key >> value;
            lru.put(key, value);
        }
    }

    return 0;
}
相关推荐
利威尔xu10 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
程序猿编码16 小时前
解决 LLM 算力浪费,一套统一 KV 管理层实现缓存复用
人工智能·神经网络·机器学习·缓存·llm·大模型推理
熊猫钓鱼>_>17 小时前
平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】
运维·服务器·开发语言·笔记·华为·harmonyos·openharmony
李&@杰18 小时前
小型园区网从零到精通
网络·tcp/ip·华为
zrc00700720 小时前
steam无法登录 steam错误 登录时出现错误。请稍后再试。解决办法 steam无法登录解决办法 湖南地区steam DNS问题解决办法
windows·经验分享·游戏·缓存·游戏程序·创业创新·玩游戏
CCblandy20 小时前
缓存淘汰实测:一次全表扫描把 LRU 命中率从 46% 打到 38%,W-TinyLFU 守住 50% 却贵 11 倍
后端·python·缓存·性能优化·架构
Wang's Blog20 小时前
Java 项目实战: 交友项目 - 小视频模块实战:访客记录、FastDFS 存储与 SpringCache 缓存
java·缓存·交友
麻瓜code21 小时前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis
snow@li1 天前
redis:RedisDesktopManager(RDM/RESP.app)Redis 数据可视化全景深度梳理
数据库·redis·缓存
你看我名字1 天前
Redis 高可用、持久化与故障切换:从缓存组件到云上基础设施
数据库·redis·缓存