You have k
servers numbered from 0
to k-1
that are being used to handle multiple requests simultaneously. Each server has infinite computational capacity but cannot handle more than one request at a time. The requests are assigned to servers according to a specific algorithm:
- The
ith
(0-indexed) request arrives. - If all servers are busy, the request is dropped (not handled at all).
- If the
(i % k)th
server is available, assign the request to that server. - Otherwise, assign the request to the next available server (wrapping around the list of servers and starting from 0 if necessary). For example, if the
ith
server is busy, try to assign the request to the(i+1)th
server, then the(i+2)th
server, and so on.
You are given a strictly increasing array arrival
of positive integers, where arrival[i]
represents the arrival time of the ith
request, and another array load
, where load[i]
represents the load of the ith
request (the time it takes to complete). Your goal is to find the busiest server(s). A server is considered busiest if it handled the most number of requests successfully among all the servers.
Return a list containing the IDs (0-indexed) of the busiest server(s). You may return the IDs in any order.
class Solution {
private static int[] servers;
public List<Integer> busiestServers(int k, int[] arrival, int[] load) {
servers=new int[k];
int arr[]=new int[k];
for (int i = 0; i <arr.length ; i++) {
arr[i]=0;
}
int counter = 0;
for (int i = 0; i <arrival.length ; i++) {
int ari = arrival[i];
int loads = load[i];
int server = findServer(ari, loads, arr, i, k);
if(server!=-1){
counter++;
servers[server]=servers[server]+1;
}else{
System.out.println("Dropped "+i);
}
}
System.out.println();
int max = servers[0];
for (int j = 0; j < servers.length; j++) {
if(servers[j]>max){
max=servers[j];
}
}
List<Integer> list=new ArrayList<>();
for (int j = 0; j < servers.length; j++) {
if(servers[j]==max){
list.add(j);
}
}
return list;
}
private int findServer(int ari, int load, int[] arr, int index,int k) {
int serverSuggest = index % k;
int flag=-1;
for (int i = serverSuggest; i < arr.length; i++) {
if(arr[i]<=ari){
arr[i]=ari+load;
flag=i;
break;
}
}
if(flag==-1) {
for (int i = 0; i < serverSuggest; i++) {
if (arr[i] <= ari) {
arr[i] = ari + load;
flag = i;
break;
}
}
}
return flag;
}
}