LRU Cache
来源:互联网 发布:经济学推荐书籍 知乎 编辑:程序博客网 时间:2024/06/16 07:41
------QUESTION------
Design and implement a data structure for Least Recently Used (LRU)cache. It should support the following operations: get
set
.
get(key)
set(key, value)
------SOLUTION------
class LRUCache{private: struct ListNode{ ListNode * prev; ListNode * next; int key; int value; ListNode(int _key, int _value):key(_key), value(_value), prev(NULL), next(NULL){} }; void change2TopPriotiy(ListNode* listNode){ if(head==listNode) return; listNode->prev->next = listNode->next; if(listNode->next) listNode->next->prev = listNode->prev; else tail = tail->prev; listNode->prev = NULL; listNode->next = head; head->prev = listNode; head = head->prev; }public: LRUCache(int capacity) { listNodeMap.clear(); this->capacity = capacity; head = NULL; tail = NULL; } int get(int key) { if(listNodeMap.find(key)!=listNodeMap.end()){ change2TopPriotiy(listNodeMap[key]); return listNodeMap[key]->value; } else return -1; } void set(int key, int value) { if(listNodeMap.find(key)==listNodeMap.end()){ // ket not exist if(listNodeMap.size()==capacity){ // reach the capacity //erase least used data listNodeMap.erase(tail->key); ListNode * tmp = tail; if(head == tail) { head = tail = NULL; } else{ tail = tail->prev; tail->next = NULL; } delete tmp; } //insert new node ListNode * newNode = new ListNode(key,value); if(!head){ //first node in the list head = tail = newNode; } else{ head->prev = newNode; newNode->next = head; head = head->prev; } listNodeMap[key]=newNode; } else{ //key already exists, change the value. eg: set(2,1),set(2,2),get(2) return 2 listNodeMap[key]->value = value; change2TopPriotiy(listNodeMap[key]); } }private: unordered_map< int,ListNode* > listNodeMap; ListNode* head; ListNode* tail; int capacity;};
0 0
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- lru cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU cache
- LRU Cache
- LRU Cache
- LRU Cache
- LRU Cache
- GeoGeo并行计算
- JPush PhoneGap Plugin
- 设计模式 - 适配器模式 C++
- Reorder List
- 新手如何学习C#、ASP.NET
- LRU Cache
- GeoGeo大数据集
- Insertion Sort List
- Sort List
- LeetCode: Remove Duplicates from Sorted Array
- Max Points on a Line
- GeoGeo Master-Slave窗口事件
- 单例与static函数
- ARMHF versus ARMEL