博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LRU Cache -- leetcode
阅读量:6486 次
发布时间:2019-06-23

本文共 1497 字,大约阅读时间需要 4 分钟。

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

基本思路:

用一个map处理查找问题。

用list维护按使用元素排序。将近期被訪问的记录,总是移动到链表头。

list中存储的是[key, value],

而map中存储的是key, 以及在list中相应节点的iterator。  

在将list中的元素移动到最前时,使用了splice函数。 此函数比先删除,再插入,要高效。

此代码在leetcode上实际运行时间为160ms。

class LRUCache{public:    LRUCache(int capacity) :capacity_(capacity) {            }        int get(int key) {        auto iter = cache_.find(key);        if (iter == cache_.end())            return -1;                lru_.splice(lru_.begin(), lru_, iter->second);        return iter->second->second;    }        void set(int key, int value) {        if (get(key) != -1) {            lru_.front().second = value;            return;        }                if (lru_.size() == capacity_) {            cache_.erase(lru_.back().first);            lru_.pop_back();        }                lru_.push_front(make_pair(key, value));        cache_[key] = lru_.begin();    }private:    typedef list
> list_t; typedef unordered_map
map_t; list_t lru_; map_t cache_; const int capacity_;};

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
Silverlight与Flash区别之一
查看>>
删除恢复Hadoop集群中的DataNode
查看>>
Silverlight 2动态创建矩形对象(附完整源代码)
查看>>
从京东技术演进看互联网企业的成长历程
查看>>
MFC ado+mysql+odbc技术分享
查看>>
js中让字符串中特定字符红色显示
查看>>
HttpClient4.5教程-第二章-连接管理
查看>>
redhat Nginx 安装
查看>>
oracle 配置监听
查看>>
moosefs即将发布新版
查看>>
SmartGit 试用过期
查看>>
python 测试驱动开发的简单例子
查看>>
Aes 加密简单例子
查看>>
AE 线编辑
查看>>
软件设计之UML—UML的构成[上]
查看>>
如何使用AdMob中介界面?
查看>>
分享一个shell脚本:通过Jumper机器来创建Jumper和target机器账号
查看>>
UITableViewCell分割线不是左对齐的问题
查看>>
CentOS7 编译安装PHP7
查看>>
MySQL常见错误代码及代码说明
查看>>