代码改变世界

leetcode - LRU Cache

2013-11-20 21:37  张汉生  阅读(156)  评论(0编辑  收藏  举报

 

 1 struct Rec{
 2     int key;
 3     int value;
 4 };
 5 
 6 class LRUCache{
 7 private:
 8     Rec * buffer;
 9     int size;
10     int curSize;
11 public:
12     LRUCache(int capacity) {
13         size = capacity;
14         buffer = new Rec[size];
15         curSize = 0;
16     }
17     ~LRUCache(){
18         if (size > 0)
19             delete[] buffer;
20     }
21     int get(int key) {
22         int index=-1;
23         for (int i = 0; i < curSize; i++){
24             if (buffer[i].key == key){
25                 index = i;
26                 break;
27             }
28         }
29         if (index == -1)
30             return -1;
31         Rec tmp = buffer[index];
32         for (int i = index - 1; i >= 0; i--)
33             buffer[i + 1] = buffer[i];
34         buffer[0] = tmp;
35         return tmp.value;
36     }
37     void set(int key, int value) {
38         if (size <= 0)
39             return;
40         int index = -1;
41         for (int i = 0; i < curSize; i++){
42             if (buffer[i].key == key){
43                 buffer[i].value = value;
44                 index = i;
45                 break;
46             }
47         }
48         if (index == -1){
49             Rec record; record.key = key; record.value = value;
50             if (curSize < size){
51                 buffer[curSize++] = record;
52             }
53             else buffer[size - 1] = record;
54             index = curSize - 1;
55         }
56         Rec tmp = buffer[index];
57         for (int i = index - 1; i >= 0; i--)
58             buffer[i + 1] = buffer[i];
59         buffer[0] = tmp;
60     }
61 };