Todos os desafios
Fácil 0 resolvidos 0% de aceitação

Tempo total com WhenAll

Descubra quanto tempo um programa leva quando cada grupo de tarefas executa junto com Task.WhenAll e os grupos executam um após o outro.

O que você vai aprender

  • Entender que WhenAll espera a tarefa mais lenta
  • Somar o tempo de grupos aguardados um após o outro
  • Tratar grupos vazios

Problema

Ver original (inglês)

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

Exemplo 1
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.

Exemplo 2
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.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.