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)
全部评论

相关推荐

云边有个小卖铺儿:校招生违约率低,所以我要高😂
点赞 评论 收藏
分享
神哥了不得:你简历字体有点不太协调呀,下面的字实在太小了呀,而且项目也不太行,建议换几个高质量的项目,面试会多很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务