-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy path0379-design-phone-directory.js
More file actions
64 lines (60 loc) · 1.78 KB
/
0379-design-phone-directory.js
File metadata and controls
64 lines (60 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* 379. Design Phone Directory
* https://leetcode.com/problems/design-phone-directory/
* Difficulty: Medium
*
* Design a phone directory that initially has maxNumbers empty slots that can store numbers.
* The directory should store numbers, check if a certain slot is empty or not, and empty a
* given slot.
*
* Implement the PhoneDirectory class:
* - PhoneDirectory(int maxNumbers) Initializes the phone directory with the number of
* available slots maxNumbers.
* - int get() Provides a number that is not assigned to anyone. Returns -1 if no number
* is available.
* - bool check(int number) Returns true if the slot number is available and false otherwise.
* - void release(int number) Recycles or releases the slot number.
*/
/**
* @param {number} maxNumbers
*/
var PhoneDirectory = function(maxNumbers) {
this.available = new Set();
this.released = [];
this.max = maxNumbers;
for (let i = 0; i < maxNumbers; i++) {
this.available.add(i);
}
};
/**
* @return {number}
*/
PhoneDirectory.prototype.get = function() {
if (this.available.size === 0 && this.released.length === 0) return -1;
let number;
if (this.released.length > 0) {
number = this.released.pop();
} else {
number = this.available.values().next().value;
this.available.delete(number);
}
return number;
};
/**
* @param {number} number
* @return {boolean}
*/
PhoneDirectory.prototype.check = function(number) {
return number >= 0 && number < this.max
&& (this.available.has(number) || this.released.includes(number));
};
/**
* @param {number} number
* @return {void}
*/
PhoneDirectory.prototype.release = function(number) {
if (number >= 0 && number < this.max
&& !this.available.has(number) && !this.released.includes(number)) {
this.released.push(number);
}
};