1606. Find Servers That Handled Most Number of Requests

Noobnoob
2 min readApr 29, 2021

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;
}
}

--

--