Class Solution
- java.lang.Object
-
- g1801_1900.s1882_process_tasks_using_servers.Solution
-
public class Solution extends Object
1882 - Process Tasks Using Servers.Medium
You are given two 0-indexed integer arrays
serversandtasksof lengthsnandmrespectively.servers[i]is the weight of theithserver, andtasks[j]is the time needed to process thejthtask in seconds.Tasks are assigned to the servers using a task queue. Initially, all servers are free, and the queue is empty.
At second
j, thejthtask is inserted into the queue (starting with the0thtask being inserted at second0). As long as there are free servers and the queue is not empty, the task in the front of the queue will be assigned to a free server with the smallest weight , and in case of a tie, it is assigned to a free server with the smallest index.If there are no free servers and the queue is not empty, we wait until a server becomes free and immediately assign the next task. If multiple servers become free at the same time, then multiple tasks from the queue will be assigned in order of insertion following the weight and index priorities above.
A server that is assigned task
jat secondtwill be free again at secondt + tasks[j].Build an array
ansof lengthm, whereans[j]is the index of the server thejthtask will be assigned to.Return the array
ans.Example 1:
Input: servers = [3,3,2], tasks = [1,2,3,2,1,2]
Output: [2,2,0,2,1,2]
Explanation: Events in chronological order go as follows:
-
At second 0, task 0 is added and processed using server 2 until second 1.
-
At second 1, server 2 becomes free. Task 1 is added and processed using server 2 until second 3.
-
At second 2, task 2 is added and processed using server 0 until second 5.
-
At second 3, server 2 becomes free. Task 3 is added and processed using server 2 until second 5.
-
At second 4, task 4 is added and processed using server 1 until second 5.
-
At second 5, all servers become free. Task 5 is added and processed using server 2 until second 7.
Example 2:
Input: servers = [5,1,4,3,2], tasks = [2,1,2,4,5,2,1]
Output: [1,4,1,4,1,3,2]
Explanation: Events in chronological order go as follows:
-
At second 0, task 0 is added and processed using server 1 until second 2.
-
At second 1, task 1 is added and processed using server 4 until second 2.
-
At second 2, servers 1 and 4 become free. Task 2 is added and processed using server 1 until second 4.
-
At second 3, task 3 is added and processed using server 4 until second 7.
-
At second 4, server 1 becomes free. Task 4 is added and processed using server 1 until second 9.
-
At second 5, task 5 is added and processed using server 3 until second 7.
-
At second 6, task 6 is added and processed using server 2 until second 7.
Constraints:
servers.length == ntasks.length == m1 <= n, m <= 2 * 1051 <= servers[i], tasks[j] <= 2 * 105
-
-
-
Constructor Summary
Constructors Constructor Description Solution()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int[]assignTasks(int[] servers, int[] tasks)
-