Several processes are scheduled for execution on an AWS server.
On one server, n
processes are schedule where the ith
process is assigned
a priority of priority[i]
. The processes are placed sequentially in a queue
and are numbered 1, 2,..,n.
The server schedules the processes per the following algorithm:
p
. (if there is no such priority or p = 0
, the algorithm is terminated)p
, call them process1
and process2
.process1
and removes it from the queue.process2
to floor(p/2)
.Given the initial priority of the processes, find the final priority of the processes which remain after the algorithm terminates.
Note that relative the arrangement of remaining processes in the queue remains the same,only their priorities change.
Function Description
Complete the function getPrioritiesAfterExecution
in the editor.
getPrioritiesAfterExecution
has the following parameter:
-
int priority[n]:
the initial prorities of processes
Returns
-
int[]:
the final priorities of the remaining processes
Example 1:
Input: priority = [6, 6, 6, 1, 2, 2]
Output: [3, 6, 0]
Explanation:The scheduler works as follows: 1. p = 6 at indices 1, 2 and 3. The indices used are process1 = 1, process2 = 2. Remove process 1 and update the priority of process 2 to floor(6/2) = 3. 2. p = 2 and process1 = 4, process2 = 5. So, update the priority = floor(2/2) = 1 of process2 and remove process1. Current set of process priorities, priority = [3, 6, 1, 1]. 3. p = 1 and process 1 = 3, process2 = 4. So, update the priority = floor(1/2) = 0 of process2 and remove process1. Current set of process priorities, priority = [3, 6, 0]. 4. There are no more matching process priorities so the algorithm ends. The final priorities of the reamining processes are priority = [3, 6, 0].
Example 2:
Input: priority = [4, 4, 2, 1]
Output: [0]
Explanation:p = 4 and process1 = 1, process2 = 2. So, update the priority = floor(4/2) = 2 of process2 and remove process1. Current set of process priorities, priority = [2, 1, 1]. p = 2 and process1 = 1, process2 = 2. So, update the priority = floor(2/2) = 1 of process2 and remove process1. Current set of process priorities, priority = [1, 1]. p = 1 and process1 = 1, process2 = 2. So, update the priority = floor(1/2) = 0 of process2 and remove process1. Current set of process priorities, priority = [0].
Example 3:
Input: priority = [2, 1, 5, 10, 10, 1]
Output: [0, 1]
Explanation:p = 10 and process1 = 4, process2 = 5. So, update the priority = floor(10/2) = 5 of process2 and remove process1. Current set of process priorities, priority = [2, 1, 5, 5, 17]. p = 5 and process1 = 3, process2 = 4. So, update the priority = floor(5/2) = 2 of process2 and remove process1. Current set of process priorities, priority = [2, 1, 2, 17]. p = 2 and process1 = 1, process2 = 3. So, update the priority = floor(2/2) = 1 of process2 and remove process1. Current set of process priorities, priority = [1, 1, 17]. p = 1 and process1 = 1, process2 = 2. So, update the priority = floor(1/2) = 0 of process2 and remove process1. Current set of process priorities, priority = [0, 1].
-
1. 1 <= n <= 105
-
2. 1 <= priorities[i] <= 109
input:
output: