2020-12-14

设计LRU缓存器

要求:
设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能
set(key, value):将记录(key, value)插入该结构
get(key):返回key对应的value值
[要求]
set和get方法的时间复杂度为O(1)
某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。
当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。

class Lru
{
    vector<int> key;//存放键
    vector<int> value;//存放值
    int len;//设置大小
    public:
        Lru(int a):len(a)
        {
        }
        void set(int x,int y)//插入元素
        {
            if(key.size()<len)
            {
                key.push_back(x);
                value.push_back(y);
            }
            else
            {
                key.erase(key.begin());
                value.erase(value.begin());
                 
                key.push_back(x);
                value.push_back(y);
            }
        }
        int get(int x)//获取键对应的值,找不到返回-1
        {
            int i=0;
            for(i = 0;i < key.size(); ++i)
                if(x == key[i])break;
             
            if(i == key.size())
                return -1;
            else{
                key.push_back(key[i]);
                value.push_back(value[i]);
                 
                key.erase(key.begin()+i);//指定迭代器
                value.erase(value.begin()+i);//指定迭代器
                return value.back();
            }
        }
};

结语:这只是一个比较简易的LRU缓存器,如果数据量非常,用vector作为底层实现数据存储,效率是非常低的,优化可以从两个角度去考虑,1:底层存储数据的容器。2.数据查找的算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值