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.cpp
48 lines (38 loc) · 1.71 KB
/
Find Servers That Handled Most Number of Requests.cpp
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
class Solution {
public:
vector<int> busiestServers(int k, vector<int>& arrival, vector<int>& load) {
int n = (int)arrival.size();
set<int> freeServers;
for (int i = 0; i < k; i++) freeServers.insert(i);
vector<int> serverTaskCount(k, 0);
set<pair<int, int>> workingServers; // [end time, server index]
for (int i = 0; i < n; i++) {
int startTime = arrival[i];
while (!workingServers.empty() && workingServers.begin()->first <= startTime) {
auto s = *workingServers.begin();
workingServers.erase(workingServers.begin());
freeServers.insert(s.second);
}
if (freeServers.empty()) continue;
int serverIndex = -1;
auto it = freeServers.lower_bound(i % k);
if (it == freeServers.end()) {
serverIndex = *freeServers.begin();
freeServers.erase(freeServers.begin());
} else {
serverIndex = *it;
freeServers.erase(it);
}
workingServers.insert({startTime + load[i], serverIndex});
serverTaskCount[serverIndex]++;
//printf("Task %d (%d, %d) assigned to server %d\n", i, startTime, load[i], serverIndex);
}
// for (auto x : serverTaskCount) cout << x << " ";
// cout << endl;
vector<int> ret;
int maxVal = *max_element(serverTaskCount.begin(), serverTaskCount.end());
for (int i = 0; i < k; i++)
if (maxVal == serverTaskCount[i]) ret.push_back(i);
return ret;
}
};