最近最少使用的缓存机制,完整实现

本文通过一道LeetCode题目,介绍了如何设计和实现一个LRU缓存机制,重点讲解了利用双向链表和字典在O(1)时间复杂度内完成操作,并提供了完整的Python代码实现。
摘要由CSDN通过智能技术生成

你好,我是zhenguo

今天结合一道leetcode有意思的题目,设计和实现一个  LRU (最近最少使用) 缓存机制,顺便和读者们加强下双向链表、字典这些数据结构的应用能力。链表增删操作时间复杂度都是O(1),这是它最强的地方,尤其追求卓越性能的算法场景,应用广泛。同时,在面试中也经常会考察到。但是,链表比较容易出错,如果在项目中应用,务必要多多测试。

1 问题

运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:

LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 

int get(int key)  如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。

void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。


当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

你是否可以在 O(1) 时间复杂度内完成这两种操作?

链接:https://leetcode-cn.com/problems/lru-cache

2 链表

这道题最高效的O(1)实现需要基于链表结构,因此再温习一下链表的基本操作。

链表是一种节点传递结构,所谓的"传递"是靠next变量,以此建立指向下一个节点的关系,可以理解为一条边,仅此而已。

如果想令j节点指向i节点,需要如何做?如果对链表不熟悉,可能想当然的这么操作:

node_j.next = node_i

上面操作后实现效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值