LRUCache 之问

LRUCache之问

今天面了拼多多,LRUCache再次出现在了我的面前,面对这个半年以来面对最多的面试代码问题,我给出我的解决方案:

1、链表

使用链表作为最主要的数据结构,将数据按照先后顺序在链表尾部插入,直到满了开始从头减去链表,时间复杂度分析分别为:

get O(n)
add O(n)
remove O(n)

使用单向链表,get需要找到我们要的cache所在位置,因此时间复杂度为O(n),add由于需要先判断是否已经存在,所以需要调用get方法,在满的时候需要remove,所以虽然删除时间复杂度为O(1),整体时间复杂度为O(n),而remove从头部删除时间复杂度为O(1)但是在中间的时候需要做get操作,时间复杂度依旧为O(n)。使用双向链表可以降低add()时间复杂度,但是整体来说时间复杂度在O(n).

2、HashMap + LinkedList

使用双向链表保存数据,使用HashMap保存数据在LinkedList中的位置,时间复杂度如下:

get O(1)
add O(1)
remove O(1)
全部评论

相关推荐

01-24 08:13
已编辑
合肥工业大学 Java
程序员牛肉:没啥问题。标准的流水线简历,但是学历好一点,所以应该是有约面的机会的。 这段时间可以考虑把自己的两个项目彻底的理一理。争取能够讲清楚每一个功能点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务