Created
August 9, 2021 02:16
-
-
Save Rutvik17/0126c0ef1fa784e01476fa76d2f0b83a to your computer and use it in GitHub Desktop.
LRU Cache LeetCode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Design a data structure that follows the constraints of a Least Recently Used (LRU) cache. | |
Implement the LRUCache class: | |
LRUCache(int capacity) Initialize the LRU cache with positive size capacity. | |
int get(int key) Return the value of the key if the key exists, otherwise return -1. | |
void put(int key, int value) Update the value of the key if the key exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the capacity from this operation, evict the least recently used key. | |
Follow up: | |
Could you do get and put in O(1) time complexity? | |
Example 1: | |
Input | |
["LRUCache", "put", "put", "get", "put", "get", "put", "get", "get", "get"] | |
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]] | |
Output | |
[null, null, null, 1, null, -1, null, -1, 3, 4] | |
Explanation | |
LRUCache lRUCache = new LRUCache(2); | |
lRUCache.put(1, 1); // cache is {1=1} | |
lRUCache.put(2, 2); // cache is {1=1, 2=2} | |
lRUCache.get(1); // return 1 | |
lRUCache.put(3, 3); // LRU key was 2, evicts key 2, cache is {1=1, 3=3} | |
lRUCache.get(2); // returns -1 (not found) | |
lRUCache.put(4, 4); // LRU key was 1, evicts key 1, cache is {4=4, 3=3} | |
lRUCache.get(1); // return -1 (not found) | |
lRUCache.get(3); // return 3 | |
lRUCache.get(4); // return 4 | |
Constraints: | |
1 <= capacity <= 3000 | |
0 <= key <= 3000 | |
0 <= value <= 104 | |
At most 3 * 104 calls will be made to get and put. | |
*/ | |
/** | |
* @param {number} capacity | |
*/ | |
var LRUCache = function(capacity) { | |
this.map = new Map(); | |
this.capacity = capacity; | |
}; | |
/** | |
* @param {number} key | |
* @return {number} | |
*/ | |
LRUCache.prototype.get = function(key) { | |
if(!this.map.has(key)) { | |
return -1; | |
}; | |
let value = this.map.get(key); | |
this.map.delete(key); | |
this.map.set(key, value) | |
return value; | |
}; | |
/** | |
* @param {number} key | |
* @param {number} value | |
* @return {void} | |
*/ | |
LRUCache.prototype.put = function(key, value) { | |
if(this.map.has(key)) { | |
this.map.delete(key); | |
}; | |
this.map.set(key, value); | |
if (this.map.size > this.capacity) { | |
this.map.delete(this.map.keys().next().value); | |
}; | |
}; | |
/** | |
* Your LRUCache object will be instantiated and called as such: | |
* var obj = new LRUCache(capacity) | |
* var param_1 = obj.get(key) | |
* obj.put(key,value) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment