Problème
await Task.WhenAll(tasks) démarre un groupe de tâches en même temps et reprend lorsque la plus lente d’entre elles se termine. Un programme qui attend plusieurs groupes les uns après les autres prend donc la somme de la tâche la plus lente de chaque groupe.
Implémentez when_all_total_time(groups), où groups[i] liste les durées des tâches du groupe i.
Input
groups: Les groupes, attendus dans l’ordre. Un groupe vide se termine immédiatement.
Output
Retournez le temps total.
Contraintes
0 ≤ nombre de groupes ≤ 10,000
0 ≤ tâches par groupe ≤ 1,000 ; 0 ≤ durée ≤ 10^6
Exemples
Entrée :
groups = [
[3, 1, 2],
[5],
[2, 2]
]
Sortie attendue :
expected = 10
Entrée :
std::vector<std::vector<long long>> groups = {
{3, 1, 2},
{5},
{2, 2}
};
Sortie attendue :
long long expected = 10;
Entrée :
long[][] groups = new long[][] {
new long[] {3, 1, 2},
new long[] {5},
new long[] {2, 2}
};
Sortie attendue :
long expected = 10;
Explication
Les groupes prennent autant de temps que leur tâche la plus lente : 3 + 5 + 2 = 10.
Entrée :
groups = [
[],
[4, 7]
]
Sortie attendue :
expected = 7
Entrée :
std::vector<std::vector<long long>> groups = {
{},
{4, 7}
};
Sortie attendue :
long long expected = 7;
Entrée :
long[][] groups = new long[][] {
new long[] {},
new long[] {4, 7}
};
Sortie attendue :
long expected = 7;
Explication
Le groupe vide ne prend pas de temps ; le second groupe prend 7.
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Un groupe se termine quand sa tâche la plus lente se termine.
Indice 2
Les groupes s'exécutent l'un après l'autre, donc leurs durées s'additionnent.
Indice 3
Un groupe vide n'ajoute aucun temps.
Complexité attendue
temps O(nombre total de tâches), espace supplémentaire O(1)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.