T1 LC146 LRU缓存机制

我的题解

  1. struct doubleLinkedNode {
  2. int key, value;
  3. doubleLinkedNode* prev;
  4. doubleLinkedNode* next;
  5. doubleLinkedNode() :key(0), value(0), prev(nullptr), next(nullptr) {};
  6. doubleLinkedNode(int _key, int _value) :key(_key), value(_value), prev(nullptr), next(nullptr) {};
  7. };
  8. class LRUCache {
  9. private:
  10. unordered_map<int, doubleLinkedNode*> cache;
  11. doubleLinkedNode* head;
  12. doubleLinkedNode* tail;
  13. int size;
  14. int capacity;
  15. public:
  16. LRUCache(int _capacity) :capacity(_capacity), size(0) {
  17. head = new doubleLinkedNode();
  18. tail = new doubleLinkedNode();
  19. head->next = tail;
  20. tail->prev = head;
  21. }
  22. int get(int key) {
  23. if (!cache.count(key)) { return -1; }
  24. doubleLinkedNode* node = cache[key];
  25. moveToHead(node);
  26. return node->value;
  27. }
  28. void put(int key, int value) {
  29. if (!cache.count(key)) {
  30. doubleLinkedNode* node = new doubleLinkedNode(key, value);
  31. cache[key] = node;
  32. addToHead(node);
  33. ++size;
  34. if (size > capacity) {
  35. doubleLinkedNode* removed = removeTail();
  36. cache.erase(removed->key);
  37. --size;
  38. }
  39. }
  40. else {
  41. doubleLinkedNode* node = cache[key];
  42. node->value = value;
  43. moveToHead(node);
  44. }
  45. }
  46. void addToHead(doubleLinkedNode* node) {
  47. node->prev = head;
  48. node->next = head->next;
  49. head->next->prev = node;
  50. head->next = node;
  51. }
  52. void removeNode(doubleLinkedNode* node) {
  53. node->prev->next = node->next;
  54. node->next->prev = node->prev;
  55. }
  56. void moveToHead(doubleLinkedNode* node) {
  57. removeNode(node);
  58. addToHead(node);
  59. }
  60. doubleLinkedNode* removeTail() {
  61. doubleLinkedNode* node = tail->prev;
  62. removeNode(node);
  63. return node;
  64. }
  65. };

今日学习总结

  • 认真上课
  • 数据挖掘起步
  • C++ OJ
  • 复习 class 基础
  • 区块链视频及笔记 - 11
  • 极客时间 - 计算机组成原理

今日英语

  • 托福单词打卡
  • 托福单词打卡*2
  • 阅读1000词书-完成
  • [ ] 单号:T 完成半套 TPO

  • [ ] 阅读至少一篇

  • 听力至少3篇
  • 口语全套
  • 写作一个
  • [ ] 双号:GRE 学习三小时

  • [ ] GRE 核心词汇助记 List*2

  • GRE 简单填空*1
  • GRE 阅读白皮书 Passage*2