首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
南辛
北京邮电大学 计算机类
关注
已关注
取消关注
@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
全部评论
推荐
最新
楼层
秋招专场
校招火热招聘中
官网直投
相关推荐
寻找遗失的未来
05-30 22:33
已编辑
门头沟学院 计算机类
24届双非鼠鼠的求职之路
本双非鼠鼠本硕都是同一间双非的计科专业,21年看到经济那么差,直接考研续命,谁知道当年能够随便去的大厂,现在高攀不起。后悔也没用,既然选择了,那就只能硬着头皮走。 鼠鼠研一光速发了篇SCI论文,达到毕业条件,直接开摆,研二一整年都在学自己的东西。但是鼠鼠鬼迷心窍,看到数据库行业发展得还行,还有23届招了那么多人,甚至三本老哥也去搞数据库了,所以鼠鼠也想吃点蛋糕,然后学起来CPP和Golang。项目也做了一些,比如15445、6.824和tinykv等。(虽然鼠鼠最后没做数据库的工作,但这些课程学了绝对不亏,做了项目更不亏,你会对内核和分布式算法有很深的理解,然后你再回头看看MySQL和r...
点赞
评论
收藏
转发
被升职的小饼干很高大
05-29 19:44
山东师范大学 计算机类
一个普通双非女生的秋招之路
大家好,我是小布丁。先简单地做个自我介绍:我今年本科毕业于某双非院校(属于那种没什么人听说过的小学校),学的是计算机专业,英语四级水平(没办法,六级确实没过)。我本科时期走的是后端这条路,主攻语言C++,系统学习过操作系统,计算机网络,MySql,Redis,算法也刷了600+,造化弄人,秋招后走向了客户端这条“不归路”。公司还够得上中厂,薪资也够我在一线苟活一直想写篇帖子来记录秋招经历,希望能帮到新手小伙伴们~实习Part 想了想还是把实习经历放这了,因为这段实习经历确实对我的秋招帮助很大。去年五月份我找到了人生第一份实习,是北京的一个小公司,说是后端吧其实也就写写脚本,打包打包软件,...
我的实习求职记录
点赞
评论
收藏
转发
一定可以找到实习的瓜友
今天 10:14
西北工业大学 计算机类
字节跳动国际电商二面(未通过)
1.每隔K个数反转链表(写了,有点小bug)2.实现一个LRU(加入一个时间),随机删除(写了一半,被面试官叫停,后面只讲了思路)3.Mysql索引,索引是Innodb,3.1id(int)这一列为索引,select * from xx where id = '1',问索引是否会失效?3.2id(string)这一列为索引,select * from xx where id = 1,问索引是否会失效?4.缓存击穿和缓存淘汰
字节跳动二面108人在聊
查看3道真题和解析
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
给你们预测一下今年的秋招!
3141
2
...
海康暑期实习
2382
3
...
【🎁】25届硬件牛牛互助计划(1期)
2353
4
...
阿里体检完还没发正式offer
2325
5
...
深圳蟑螂真的很可怕吗
2149
6
...
5.31拼多多服务端开发实习生一面(75min)
2006
7
...
毕业了!
1886
8
...
拿了蓝桥杯c++b组国二,水平怎么样,找后端开发工作有多大优势?
1834
9
...
momenta 实习 C++ 一面
1769
10
...
大佬们帮选一下offer
1570
正在热议
#
和牛牛一起刷题打卡
#
13904次浏览
1283人参与
#
通信硬件薪资爆料
#
256111次浏览
2411人参与
#
不去互联网可以去金融科技
#
4098次浏览
57人参与
#
牛客帮帮团来啦!有问必答
#
1093347次浏览
16326人参与
#
面试被问第一学历差时该怎么回答
#
18261次浏览
199人参与
#
简历中的项目经历要怎么写?
#
14288次浏览
191人参与
#
工作两年想退休了
#
19273次浏览
240人参与
#
实习生应该准时下班吗
#
93245次浏览
705人参与
#
你收到了团子的OC了吗
#
530775次浏览
6296人参与
#
简历中的项目经历要怎么写
#
482062次浏览
8763人参与
#
简历无回复,你会继续海投还是优化再投?
#
23474次浏览
329人参与
#
你已经投递多少份简历了
#
338542次浏览
4905人参与
#
你怎么评价今年的春招?
#
12448次浏览
193人参与
#
晒一晒我的offer
#
3771057次浏览
58072人参与
#
担心入职之后被发现很菜怎么办
#
39595次浏览
328人参与
#
我想象的工作vs实际工作
#
105762次浏览
1700人参与
#
我的上岸简历长这样
#
202452次浏览
4098人参与
#
本周投递记录
#
220965次浏览
5378人参与
#
硬件人的简历怎么写
#
81834次浏览
849人参与
#
产品人求职现状
#
56847次浏览
823人参与
#
2022毕业生求职现身说法
#
23630次浏览
338人参与
牛客网
牛客企业服务