【每天一道算法题(75/150)】LRU 缓存
思路:一道中等写一下午

首先,LRU 是最近最少使用算法,也被称为页面置换算法。是怎么实现的呢。给每一个页面一个访问字段,记为 T,T 为这个页面自上次被访问以来所经历的时间。当必须要淘汰一个页面时,找出所有 T 中最大的,即最少使用的那个页面淘汰。

其次,题目要求所实现的 LRU 算法的类(后文简称 cache)的 get 和 put 方法的时间复杂度为 o(1)。

那么问题来了,get 还好说,map 的 get 方法时间复杂度本身就为 o(1),put 方法难在需要:

1. 先找到最大的 T
2. 将新的 key, value 放入 cache

那么无论是哈希表,还是链表,双向链表,有序链表及有序双向链表都无法做到时间复杂度为 0(1),除非

哈希表 + 双向链表。

下面操作步骤讲讲双向链表的 get 方法:

操作步骤:
put [1,1]
put[2,2]
get[1]

初始化双向链表为:
head <-> tail

第一步:put [1,1]
head <-> (1,1) <-> tail

第二步:put [2,2]
head <-> (2,2) <-> (1,1) <-> tail

第三步:get [1]

a. 先通过哈希表找到链表所在位置,返回 node
b. 在链表中将 [1,1] 移除
此时链表状态:head <-> (2,2) <-> tail
c. 在链表中将 [1,1] 插入到链表头部
此时链表状态:had <-> (1,1) <-> (2,2) <-> tail

返回 node.val = 1;

经过上述操作,把 get 的 Key 的 value 返回了,链表也更新了,保证了最新使用节点(页面)的在最前面(链表头部)。

#早安心语##外国文学#

THE WIND AND THE LEAVES

风儿和树叶

作者:乔治·库柏

"Come, little leaves,"

said the wind one day.

一天,风儿说:

“过来,小叶子

"Come o'er the meadows with me,

and play;

和我一起去牧场玩吧

Put on your dress

of red and gold

穿上你红色金色的裙子

Summer is gone,

and the days grow cold."

夏天过去

天气变凉了

Soon as the leaves

heard the wind's loud call,

叶子听到风儿大声召唤

Down they came fluttering,

one and all;

所有的叶子都落了下来

Over the brown fields

they danced and flew,

在棕色的原野上

它们飞舞着

Singing the soft little songs

they knew.

唱着它们会唱的柔美的歌

"Cricket, good-by,

we've been friends so long;

蟋蟀,再见了

我们是老朋友

Little brook, sing us

your farewell song, —

小溪为我们唱着告别曲

Say you are sorry

to see us go

看到我们离开很难过

Ah! you will miss us,

right well we know.

啊,你要离开我们了

我们知道

"Dear little lambs,

in your fleecy fold,

“亲爱的小羊羔

在毛茸茸的羊群里

Mother will keep you

from harm and cold;

羊妈妈会保护你们

不受伤、不着凉

Fondly we've watched you

in vale and glade;

我们会在山谷和林间

深情地望着你们

Say, will you dream

of our loving shade?"

告诉我

你们会梦到我们美好的荫凉吗?”

Dancing and whirling,

the little leaves went;

飞舞着,旋转着

小叶子走了

Winter had called them,

and they were content.

冬天在召唤

它们心甘情愿

Soon fast asleep

in their earthy beds,

它们很快入睡

大地为床

The snow laid a coverlet

over their heads.

雪花为被

轻轻盖在它们的头上

— E·N·D —

#金地雄语音鉴定书##金地雄##金地雄澄清#不看澄清继续冤枉人是你的武器吗?投我那一够加那 那加咪那 内呢gin 木漏 打啦哇Put you on my back seatBack seat Back seat uh woo uh一 gi不露内泼You don't have to fight 不漏哥我哈几马Put you on my back seat Back seat Back seatNow let's get it on on my back seat


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 今天去吃kfc结果去的太晚 想吃的都被抢完了 只买了一桶热辣香骨鸡块(特别油 不太好吃)然后又转头去了釜岱烤肉(肉肉只有三盘 我俩不是特别饿 反正两人餐最后没吃
  • 第一次21天减肥发,那是我生平第一次,在初中就体重达到60kg以后瘦到105g,也是我第一次穿露腰装(不好意思,以前胖到没腰)然而螺蛳粉这个小妖精,当然,还有p
  • 费用多少钱、野生案例,都可以在置顶评论查询 ?双眼皮哪个医生好?这些是问的比较多的医生,部分建议【劝退】ping论区可以自助查询~~南医大二附:宋辉、李昌北京爱
  • 机构龙虎榜(7月1日): 买入: 道恩股份(1.36亿)、京山轻机(1.07亿) 丰元股份(9000万)、传艺科技(8800万) 中兵红箭(7300万)、
  •   《武关西逢配流吐蕃》嗟尔戎人莫惨然,湖南近地保生全。我今罪重无归望,直去长安路八千。
  • #王源[超话]##唯爱王源##王源21景从云集##源源得力yydl##王源代言豆本豆##得力品牌代言人王源# 写尽千山落笔是你,望尽星辰美丽是你,书尽泛黄扉页是
  • ✅活动目标:收到超过1000人的祝福即可解锁大屏两天使用权(每500,使用天数+1)祝福最终会汇总到一起的哟,小白鸽们有什么想对白敬亭说的生日祝福吗,快来参与赢
  • 繁华将尽情未央,天清气爽夜微凉望远山层林渐变,看窗外云淡风轻盈一怀风香满袖,吟一阙秋水长天处暑,一场旧的辉煌的结束一个新的冷静的开始愿你心境清凉,热情不减,热情
  • 我试图识别其中的一些人,并在我1999年为《时尚时尚》所做的社论中代表每一个人。我试图识别其中的一些人,并在我1999年为《时尚时尚》所做的社论中代表每一个人。
  • 因为首先沙海没有完结,怕掉坑,其次我怕看完沙海我会犯原则性的错误,毕竟小妈文学太他妈上头了,不过倒是第一次知道原来黎簇只和吴邪呆在一起了13天,小狼崽子黎簇一见
  • #大胃爱丽丝[超话]# 第一次冲互动棒给了紫菱第一次知道这么难,姐妹们都好厉害[赢牛奶] 最后努力到了三十来名(记性差的我) 前些天收到了4月互动榜前50的礼物
  • 14.如果招财猫真的有用,它也不用在店里打工了15.别人都有甜甜恋爱,而我只有秃秃的脑袋。 只是,茶说,这一切早有安排,累世的缘分,拿起茶杯就好。
  • 你担着蕾,一张都不买,你真的不觉得自己可笑吗,真的有脸混在圈子里?亲亲袋鼠呢,确实是让我成长富有正能量的一个品牌企业,因为亲亲袋鼠我认识自己的很多问题所在,在公
  • )我当时脑子嗡嗡嗡的,他去哪里了,什么时候下的推车,是自己下去的还是被别人抱走的,他现在在哪里…我努力回忆进商场扫健康码的时候,他一定是在的,然后我在进来之后在
  • 想着想着又笑了,老人家的回忆录满满的打美国鬼子,我的估计大半部分全是在美国的难忘生活[交税] 不经感慨上帝开了个好大的玩笑[春游家族](絮絮叨叨的一天) 劝人戒
  • 因为二狗的手机信号不好,我就主动帮他打电话到餐厅订包房,但留他手机号的时候背错了——中间两个数字我总是把顺序弄反[二哈]挂掉电话后我突然想知道他能不能背出我的手
  • 本来不想拿的,可是这局队友好给力,啵啵团灭对面[允悲],然后就想着试一试,还真成了对面螳螂后期次次杀我没杀掉都被我逃了或者被队友救了哈哈哈[開學季]最主要的是我
  • 晚安˃ʍ˂#胖大海和陆小界##胖丸几# 今日加班半天晚上给公公过生日胖头丸只要是吹生日蜡烛都说是自己过生日[照相机]吃完饭第一次带妈妈去大草坪天气很好草坪还是这
  • #数字经济# #邮票# #集邮# #钱币收藏# #数字#浣溪沙(一)· 塞北*小桂林——桓仁大雅河风光实拍、游后感分享轻艑*流漂游几程,熟谙*景致又相逢。​​*
  • ”任正非直言,华为公司合作部支持了很多钱给高校做前沿研究,其实对自身来说是没有商业价值的,因为理论研究出来后是对全人类完全开放、共享的,“只是我们有十几万工程师