Problema
await Task.WhenAll(tasks) inicia um grupo de tarefas ao mesmo tempo e continua quando a mais lenta termina. Portanto, um programa que aguarda vários grupos um após o outro leva a soma da tarefa mais lenta de cada grupo.
Implemente when_all_total_time(groups), em que groups[i] lista as durações das tarefas no grupo i.
Input
groups: Os grupos, aguardados na ordem. Um grupo vazio termina imediatamente.
Output
Retorne o tempo total.
Restrições
0 ≤ número de grupos ≤ 10,000
0 ≤ tarefas por grupo ≤ 1,000; 0 ≤ duração ≤ 10^6
Exemplos
Entrada:
groups = [
[3, 1, 2],
[5],
[2, 2]
]
Saída esperada:
expected = 10
Entrada:
std::vector<std::vector<long long>> groups = {
{3, 1, 2},
{5},
{2, 2}
};
Saída esperada:
long long expected = 10;
Entrada:
long[][] groups = new long[][] {
new long[] {3, 1, 2},
new long[] {5},
new long[] {2, 2}
};
Saída esperada:
long expected = 10;
Explicação
Os grupos levam tanto tempo quanto sua tarefa mais lenta: 3 + 5 + 2 = 10.
Entrada:
groups = [
[],
[4, 7]
]
Saída esperada:
expected = 7
Entrada:
std::vector<std::vector<long long>> groups = {
{},
{4, 7}
};
Saída esperada:
long long expected = 7;
Entrada:
long[][] groups = new long[][] {
new long[] {},
new long[] {4, 7}
};
Saída esperada:
long expected = 7;
Explicação
O grupo vazio não leva tempo; o segundo grupo leva 7.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Um grupo termina quando sua tarefa mais lenta termina.
Dica 2
Os grupos rodam um após o outro, então seus tempos se somam.
Dica 3
Um grupo vazio não acrescenta tempo.
Complexidade esperada
tempo O(número total de tarefas), espaço extra O(1)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.