forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFind Servers That Handled Most Number of Requests.js
48 lines (39 loc) · 1.3 KB
/
Find Servers That Handled Most Number of Requests.js
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
var busiestServers = function(k, arrival, load) {
let loadMap = {};
let pq = new MinPriorityQueue({ compare: (a,b) => a[1] - b[1] });
let availableServers = new Set(new Array(k).fill(0).map((_, index) => index));
for (let i = 0; i < arrival.length; i++) {
// calc end time
let end = arrival[i] + load[i];
// bring server back
while (pq.front()?.[1] <= arrival[i]) {
const [server] = pq.dequeue();
availableServers.add(server);
}
let server = i % k;
// drop if no available server
if (availableServers.size === 0) continue;
// find the next avaiable sever
while (!availableServers.has(server)) {
server++;
if (server === k + 1) {
server = 0;
}
}
// record the load
if (!loadMap[server]) {
loadMap[server] = 0;
}
loadMap[server]++;
availableServers.delete(server);
pq.enqueue([server, end]);
}
let res = [];
let sorted = Object.entries(loadMap).sort((a,b) => b[1] - a[1]);
let max = sorted[0][1];
let i = 0;
while (sorted[i]?.[1] === max) {
res.push(+sorted[i++][0]);
}
return res;
};