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 };