All challenges
Easy 0 solved 0% acceptance

WhenAll Total Time

Find how long a program takes when each group of tasks runs together with Task.WhenAll and groups run one after another.

What you'll learn

  • Understand that WhenAll waits for the slowest task
  • Add up the time of groups awaited in order
  • Handle empty groups

Problem

await Task.WhenAll(tasks) starts a group of tasks together and continues when the slowest one finishes. A program that awaits several groups one after another therefore takes the sum of the slowest task of each group.

Implement when_all_total_time(groups), where groups[i] lists the durations of the tasks in group i.

Input

groups: The groups, awaited in order. An empty group finishes immediately.

Output

Return the total time.

Constraints

0 ≤ number of groups ≤ 10,000

0 ≤ tasks per group ≤ 1,000; 0 ≤ duration ≤ 10^6

Examples

Example 1
Input:
groups = [
    [3, 1, 2],
    [5],
    [2, 2]
]

Expected output:
expected = 10
Input:
std::vector<std::vector<long long>> groups = {
    {3, 1, 2},
    {5},
    {2, 2}
};

Expected output:
long long expected = 10;
Input:
long[][] groups = new long[][] {
    new long[] {3, 1, 2},
    new long[] {5},
    new long[] {2, 2}
};

Expected output:
long expected = 10;

Explanation

The groups take as long as their slowest task: 3 + 5 + 2 = 10.

Example 2
Input:
groups = [
    [],
    [4, 7]
]

Expected output:
expected = 7
Input:
std::vector<std::vector<long long>> groups = {
    {},
    {4, 7}
};

Expected output:
long long expected = 7;
Input:
long[][] groups = new long[][] {
    new long[] {},
    new long[] {4, 7}
};

Expected output:
long expected = 7;

Explanation

The empty group takes no time; the second group takes 7.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

A group finishes when its slowest task finishes.

Hint 2

Groups run one after another, so their times add up.

Hint 3

An empty group adds no time.

Expected complexity

O(total number of tasks) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.