Find Servers That Handled Most Number of Requests LeetCode solution in C++

1
class Solution {
2
public:
3
vector<int> busiestServers(int k, vector<int> &arrival, vector<int> &load) {
4
int n = (int)arrival.size();
5

6
set<int> freeServers;
7
for (int i = 0; i < k; i++) freeServers.insert(i);
8

9
vector<int> serverTaskCount(k, 0);
10

11
set<pair<int, int>> workingServers; // [end time, server index]
12
for (int i = 0; i < n; i++) {
13
int startTime = arrival[i];
14

15
while (!workingServers.empty() && workingServers.begin()->first <= startTime) {
16
auto s = *workingServers.begin();
17
workingServers.erase(workingServers.begin());
18
freeServers.insert(s.second);
19
}
20

21
if (freeServers.empty()) continue;
22

23
int serverIndex = -1;
24
auto it = freeServers.lower_bound(i % k);
25
if (it == freeServers.end()) {
26
serverIndex = *freeServers.begin();
27
freeServers.erase(freeServers.begin());
28
} else {
29
serverIndex = *it;
30
freeServers.erase(it);
31
}
32

33
workingServers.insert({startTime + load[i], serverIndex});
34

35
serverTaskCount[serverIndex]++;
36
// printf("Task %d (%d, %d) assigned to server %d\n", i, startTime,
37
// load[i], serverIndex);
38
}
39
// for (auto x : serverTaskCount) cout << x << " ";
40
// cout << endl;
41

42
vector<int> ret;
43
int maxVal = *max_element(serverTaskCount.begin(), serverTaskCount.end());
44
for (int i = 0; i < k; i++)
45
if (maxVal == serverTaskCount[i]) ret.push_back(i);
46

47
return ret;
48
}
49
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0