Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Tiempo total con WhenAll

Encuentra cuánto tarda un programa cuando cada grupo de tareas se ejecuta junto con Task.WhenAll y los grupos se ejecutan uno tras otro.

Lo que aprenderás

  • Entender que WhenAll espera a la tarea más lenta
  • Sumar el tiempo de grupos esperados uno tras otro
  • Manejar grupos vacíos

Problema

Ver original (inglés)

await Task.WhenAll(tasks) inicia un grupo de tareas al mismo tiempo y continúa cuando termina la más lenta. Por lo tanto, un programa que espera varios grupos uno tras otro tarda la suma de la tarea más lenta de cada grupo.

Implementa when_all_total_time(groups), donde groups[i] enumera las duraciones de las tareas del grupo i.

Entrada

groups: Los grupos, esperados en orden. Un grupo vacío termina inmediatamente.

Salida

Devuelve el tiempo total.

Restricciones

0 ≤ número de grupos ≤ 10,000

0 ≤ tareas por grupo ≤ 1,000; 0 ≤ duración ≤ 10^6

Ejemplos

Ejemplo 1
Entrada:
groups = [
    [3, 1, 2],
    [5],
    [2, 2]
]

Salida esperada:
expected = 10
Entrada:
std::vector<std::vector<long long>> groups = {
    {3, 1, 2},
    {5},
    {2, 2}
};

Salida esperada:
long long expected = 10;
Entrada:
long[][] groups = new long[][] {
    new long[] {3, 1, 2},
    new long[] {5},
    new long[] {2, 2}
};

Salida esperada:
long expected = 10;

Explicación

Los grupos tardan tanto como su tarea más lenta: 3 + 5 + 2 = 10.

Ejemplo 2
Entrada:
groups = [
    [],
    [4, 7]
]

Salida esperada:
expected = 7
Entrada:
std::vector<std::vector<long long>> groups = {
    {},
    {4, 7}
};

Salida esperada:
long long expected = 7;
Entrada:
long[][] groups = new long[][] {
    new long[] {},
    new long[] {4, 7}
};

Salida esperada:
long expected = 7;

Explicación

El grupo vacío no tarda nada; el segundo grupo tarda 7.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Un grupo termina cuando termina su tarea más lenta.

Pista 2

Los grupos se ejecutan uno tras otro, así que sus tiempos se suman.

Pista 3

Un grupo vacío no añade tiempo.

Complejidad esperada

tiempo O(número total de tareas), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.