题目大意:
就是实现内存管理中的LRU(Least Recently Used)内存管理算法
内存管理算法的话,LRU和LFU不同,LRU是移除最久没有使用的页
而LFU是移除最近使用次数最少的页
大致思路:
这个问题的话,表示刚好复习了一下内存管理...
首先由于每个内存块在被使用时,会导致一个内存块最近被使用,而其他的块的相对位置不变,考虑用链表来表示他们,这里使用双向链表,链表从头节点往结尾,越是最近使用,也就是说尾节点是最近访问的,当容量满的时候,删除头节点,腾出空间,插入和移动节点的复杂度是O(1)
当set的时候由于需要查找key对应的value, 考虑用map来进行维护,用map 来在O(logn)的时间复杂度内找到对应的节点位置
那么查找节点是否在内存池中的复杂度也就是O(logn),整体的单词操作的时间复杂度是O(logn)
代码如下:
Result : Accepted Time : 96 ms
/*
* Author: Gatevin
* Created Time: 2016/3/7 11:06:11
* File Name: test.cpp
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include