Tous les défis
Facile 0 résolus 0 % de réussite

Durée totale avec WhenAll

Déterminez combien de temps un programme prend lorsque chaque groupe de tâches s’exécute ensemble avec Task.WhenAll et que les groupes s’enchaînent les uns après les autres.

Ce que vous allez apprendre

  • Comprendre que WhenAll attend la tâche la plus lente
  • Additionner le temps de groupes attendus l'un après l'autre
  • Gérer les groupes vides

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

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

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

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.