LRU Cache [LeetCode]

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

Solution: 

 1 class LRUCache{

 2 public:

 3     vector<int> keys;

 4     unordered_map<int, int> map;

 5     int size = 0;

 6     LRUCache(int capacity) {

 7         size = capacity;

 8     }

 9     

10     void adjust(int key){

11         int idx = -1;

12         for(int i = keys.size() - 1; i >= 0 ; i --)

13             if(keys[i] == key){

14                 idx = i;

15                 break;

16             }

17         

18         if(idx == -1)

19             return;

20             

21         keys.erase(keys.begin() + idx);

22         keys.push_back(key);

23     }

24     

25     int get(int key) {

26         if(map.find(key) == map.end()){

27             return -1;

28         }else{

29             adjust(key);

30             return map[key];

31         }

32     }

33     

34     void set(int key, int value) {

35         if(map.find(key) != map.end()){

36             map[key] = value;

37             adjust(key);

38             return;

39         }

40         

41         if(keys.size() >= size ){ 

42             int key_to_erase = keys[0];

43             keys.erase(keys.begin());

44             map.erase(key_to_erase);

45         }

46     

47         keys.push_back(key);

48         map[key] = value;

49     }

50 };

 

你可能感兴趣的:(LeetCode)