Problema
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
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.
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.