Problem
await Task.WhenAll(tasks) startet eine Gruppe von Aufgaben zusammen und fährt fort, wenn die langsamste fertig ist. Ein Programm, das mehrere Gruppen nacheinander erwartet, benötigt daher die Summe der langsamsten Aufgabe jeder Gruppe.
Implementiere when_all_total_time(groups), wobei groups[i] die Laufzeiten der Aufgaben in Gruppe i enthält.
Input
groups: Die Gruppen, in dieser Reihenfolge erwartet. Eine leere Gruppe ist sofort fertig.
Output
Gib die Gesamtzeit zurück.
Einschränkungen
0 ≤ Anzahl der Gruppen ≤ 10,000
0 ≤ Tasks pro Gruppe ≤ 1,000; 0 ≤ Dauer ≤ 10^6
Beispiele
Eingabe:
groups = [
[3, 1, 2],
[5],
[2, 2]
]
Erwartete Ausgabe:
expected = 10
Eingabe:
std::vector<std::vector<long long>> groups = {
{3, 1, 2},
{5},
{2, 2}
};
Erwartete Ausgabe:
long long expected = 10;
Eingabe:
long[][] groups = new long[][] {
new long[] {3, 1, 2},
new long[] {5},
new long[] {2, 2}
};
Erwartete Ausgabe:
long expected = 10;
Erläuterung
Die Gruppen dauern so lange wie ihre langsamste Aufgabe: 3 + 5 + 2 = 10.
Eingabe:
groups = [
[],
[4, 7]
]
Erwartete Ausgabe:
expected = 7
Eingabe:
std::vector<std::vector<long long>> groups = {
{},
{4, 7}
};
Erwartete Ausgabe:
long long expected = 7;
Eingabe:
long[][] groups = new long[][] {
new long[] {},
new long[] {4, 7}
};
Erwartete Ausgabe:
long expected = 7;
Erläuterung
Die leere Gruppe benötigt keine Zeit; die zweite Gruppe benötigt 7.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Eine Gruppe ist fertig, wenn ihr langsamster Task fertig ist.
Hinweis 2
Gruppen laufen nacheinander, also addieren sich ihre Zeiten.
Hinweis 3
Eine leere Gruppe kostet keine Zeit.
Erwartete Komplexität
Zeit O(Gesamtzahl der Tasks), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.