题目链接
嗯嗯,第一眼看见这个题目感觉是用循环顺序表或者队列和哈希表来实现,可是尝试了之后发现一个问题,就是题目中的get操作也会使得某个值被操作从而改变其在顺序表/队列中的位置,这会导致每次get操作时都要按顺序将后半部分的元素往前位移之类的操作,从而时间复杂度为O(N)与题意不符合。所以我就考虑应该用链表加哈希表来实现,不过由于不太熟练就直接看了别人的解答,这题可以使用python里已有的结合了双向链表和哈希表的数据结构如OrderedDict(见实现2),当然这样就和题意不符了。所以这题需要自己将双向链表写出来(见实现1),这个实现的各项操作中,访问哈希表的时间复杂度为O(1),在双向链表的头部添加节点、在双向链表的尾部删除节点的复杂度也为O(1)。而将一个节点移到双向链表的头部,可以分成”删除该节点”和”在双向链表的头部添加节点”两步操作,都可以在O(1) 时间内完成。