首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
南辛
北京邮电大学 C++
关注
已关注
取消关注
@NTH_20:
每天一道场景题
带过期时间的LRU实现(更新时不改变expire_time)put 的时候遍历找过期的,也可以从list->head往后找,这里应该优化不成O(1)吧?#include <iostream>#include <unordered_map>#include <time.h>using namespace std;const int ttl=10;class LRUCache{public: struct DLinkNode { int key,value; time_t expire_time; DLinkNode *prev,*next; DLinkNode(int key,int value):key(key),value(value),expire_time(0),prev(nullptr),next(nullptr){} }; int _cap; unordered_map<int,DLinkNode*> _cache; DLinkNode *_head,*_tail; LRUCache(int capacity):_cap(capacity){ _head=new DLinkNode(0,0); _tail=new DLinkNode(0,0); _head->next=_tail; _tail->prev=_head; } void removeNode(DLinkNode* tmp){ tmp->prev->next=tmp->next; tmp->next->prev=tmp->prev; return ; } void addToLast(DLinkNode* tmp){ DLinkNode * pre=_tail->prev; pre->next=tmp; tmp->next=_tail; _tail->prev=tmp; tmp->prev=pre; return ; } DLinkNode* removeHead(){ DLinkNode* tmp=_head->next; _head->next=tmp->next; tmp->next->prev=_head; return tmp; } int get(int key){ if(_cache.find(key)==_cache.end()) return -1; else{ DLinkNode* tmp=_cache[key]; time_t cur_time; cur_time=time(nullptr); if(difftime(cur_time,tmp->expire_time)<=0){ //过期 removeNode(tmp);//链表删 _cache.erase(key);//hash删 return -1; }else{ //这里也可以重新计算expire_time = cur_time + ttl removeNode(tmp); addToLast(tmp); return tmp->value; } } } void put(int key,int value){ if(_cache.find(key)!=_cache.end()){ DLinkNode* tmp=_cache[key]; removeNode(tmp); addToLast(tmp); //更新值,这里也可以重新计算expire_time = cur_time + ttl tmp->value=value; return ; }else{ DLinkNode* tmp=new DLinkNode(key,value); time_t cur_time; cur_time=time(nullptr); tmp->expire_time=cur_time+ttl; addToLast(tmp); _cache[key]=tmp; bool is_expire=false; if(_cache.size()>=_cap){ //找第一个过期的删除,O(N) unordered_map<int,DLinkNode*>::iterator it; for(;it!=_cache.end();it++){ if(difftime(it->second->expire_time,cur_time)>=0){ is_expire=true; break; } } if(is_expire){ //找到啦 DLinkNode* tmp=it->second; removeNode(tmp); _cache.erase(tmp->key); }else{ //都没过期 DLinkNode* tmp=removeHead(); _cache.erase(tmp->key); } } } }};
点赞 11
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-01 14:55
门头沟学院 硬件开发
长鑫性格测评
有没有佬说一下要什么样的性格才能过呀
投递长鑫存储等公司10个岗位
点赞
评论
收藏
分享
07-31 14:10
门头沟学院 Java
那很敬业了
点赞
评论
收藏
分享
07-20 21:57
已编辑
门头沟学院 Java
二本学院真的不配就业吗 图二是重新排版,把一些有争议的地方改掉了
仁者伍敌:
专业技能好多,好强
点赞
评论
收藏
分享
08-01 18:12
大连理工大学 测试工程师
强东啊!能给个机会吗?
投递京东等公司10个岗位
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
1.1W
2
...
虾皮秋招一面
3573
3
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
3467
4
...
觉得研发高人一等的这辈子有了
2768
5
...
百度提前批 三面
2032
6
...
最强本科✌
1759
7
...
也是逆天了
1451
8
...
被猿辅导挂了简历,但我想说...
1405
9
...
虾皮一面凉经
1368
10
...
上班一周,工资还没拿,先欠公司两千
1338
创作者周榜
更多
正在热议
更多
#
工作中哪个瞬间让你想离职
#
65795次浏览
581人参与
#
找工作如何保持松弛感?
#
92213次浏览
1119人参与
#
中兴秋招
#
207188次浏览
2303人参与
#
如何快速融入团队?
#
18774次浏览
218人参与
#
Offer比较,你最看重什么?
#
194267次浏览
1321人参与
#
和同事相处最忌讳的是__
#
26771次浏览
256人参与
#
秋招被确诊为……
#
166408次浏览
792人参与
#
投格力的你,拿到offer了吗?
#
87585次浏览
586人参与
#
虾皮求职进展汇总
#
250771次浏览
1883人参与
#
你最希望上岸的公司是?
#
135953次浏览
709人参与
#
计算机专业还有必要去大厂卷吗
#
38743次浏览
183人参与
#
26届的你,投了哪些公司?
#
50671次浏览
518人参与
#
柠檬微趣工作体验
#
6902次浏览
40人参与
#
地平线求职进展汇总
#
52756次浏览
371人参与
#
简历上的经历如何包装
#
32207次浏览
863人参与
#
通信硬件岗投递时间线
#
18958次浏览
69人参与
#
你跟室友的关系怎么样?
#
8269次浏览
123人参与
#
我对___祛魅了
#
52836次浏览
461人参与
#
你遇到最难的面试题目是_
#
17581次浏览
209人参与
#
我想象的实习vs现实的实习
#
290529次浏览
2246人参与
#
你的秋招第一面感觉怎么样
#
77573次浏览
595人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务