Skip to content

Commit 2741420

Browse files
authored
code added
1 parent d12c2d0 commit 2741420

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

17_cacheWithTimeLimit.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,69 @@ TimeLimitedCache.prototype.count = function () {
104104
* timeLimitedCache.get(1) // 42
105105
* timeLimitedCache.count() // 1
106106
*/
107+
108+
109+
110+
111+
112+
113+
114+
115+
116+
117+
# Code:
118+
```
119+
var TimeLimitedCache = function () {
120+
this.data = {};
121+
this.active = 0;
122+
};
123+
124+
/**
125+
* @param {number} key
126+
* @param {number} value
127+
* @param {number} duration time until expiration in ms
128+
* @return {boolean} if un-expired key already existed
129+
*/
130+
TimeLimitedCache.prototype.set = function (key, value, duration) {
131+
const prevActive = !!this.data[key]?.isActive;
132+
prevActive ? clearTimeout(this.data[key].timeoutId) : this.active++;
133+
134+
const timeoutId = setTimeout(() => {
135+
this.active--;
136+
this.data[key].isActive = false;
137+
}, duration);
138+
139+
this.data[key] = {
140+
isActive: true,
141+
value,
142+
timeoutId
143+
}
144+
145+
return prevActive;
146+
};
147+
148+
/**
149+
* @param {number} key
150+
* @return {number} value associated with key
151+
*/
152+
TimeLimitedCache.prototype.get = function (key) {
153+
return this.data[key]?.isActive ? this.data[key].value : -1;
154+
};
155+
156+
/**
157+
* @return {number} count of non-expired keys
158+
*/
159+
TimeLimitedCache.prototype.count = function () {
160+
return this.active;
161+
};
162+
163+
/**
164+
* const timeLimitedCache = new TimeLimitedCache()
165+
* timeLimitedCache.set(1, 42, 1000); // false
166+
* timeLimitedCache.get(1) // 42
167+
* timeLimitedCache.count() // 1
168+
*/
169+
```
170+
171+
172+
![upvote.jpeg](https://assets.leetcode.com/users/images/5f4cbe15-6cad-4d49-80d4-00608bb91a4a_1720427891.529782.jpeg)

0 commit comments

Comments
 (0)