Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Tổng thời gian với WhenAll

Tìm chương trình mất bao lâu khi mỗi nhóm tác vụ chạy cùng nhau bằng Task.WhenAll và các nhóm chạy lần lượt.

Bạn sẽ học được gì

  • Hiểu rằng WhenAll chờ tác vụ chậm nhất
  • Cộng thời gian của các nhóm được await lần lượt
  • Xử lý nhóm rỗng

Đề bài

Xem bản gốc (English)

await Task.WhenAll(tasks) bắt đầu một nhóm tác vụ cùng lúc và tiếp tục khi tác vụ chậm nhất hoàn thành. Vì vậy, một chương trình chờ nhiều nhóm lần lượt sẽ mất tổng thời gian của tác vụ chậm nhất trong mỗi nhóm.

Hãy cài đặt when_all_total_time(groups), trong đó groups[i] liệt kê thời lượng của các tác vụ trong nhóm i.

Input

groups: Các nhóm, được chờ theo thứ tự. Một nhóm rỗng sẽ hoàn thành ngay lập tức.

Output

Trả về tổng thời gian.

Ràng buộc

0 ≤ số nhóm ≤ 10,000

0 ≤ số tác vụ mỗi nhóm ≤ 1,000; 0 ≤ thời gian ≤ 10^6

Ví dụ

Ví dụ 1
Đầu vào:
groups = [
    [3, 1, 2],
    [5],
    [2, 2]
]

Kết quả mong đợi:
expected = 10
Đầu vào:
std::vector<std::vector<long long>> groups = {
    {3, 1, 2},
    {5},
    {2, 2}
};

Kết quả mong đợi:
long long expected = 10;
Đầu vào:
long[][] groups = new long[][] {
    new long[] {3, 1, 2},
    new long[] {5},
    new long[] {2, 2}
};

Kết quả mong đợi:
long expected = 10;

Giải thích

Các nhóm mất thời gian bằng tác vụ chậm nhất của chúng: 3 + 5 + 2 = 10.

Ví dụ 2
Đầu vào:
groups = [
    [],
    [4, 7]
]

Kết quả mong đợi:
expected = 7
Đầu vào:
std::vector<std::vector<long long>> groups = {
    {},
    {4, 7}
};

Kết quả mong đợi:
long long expected = 7;
Đầu vào:
long[][] groups = new long[][] {
    new long[] {},
    new long[] {4, 7}
};

Kết quả mong đợi:
long expected = 7;

Giải thích

Nhóm rỗng không tốn thời gian; nhóm thứ hai mất 7.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Một nhóm xong khi tác vụ chậm nhất của nó xong.

Gợi ý 2

Các nhóm chạy nối tiếp nên thời gian được cộng dồn.

Gợi ý 3

Nhóm rỗng không thêm thời gian.

Độ phức tạp mong đợi

thời gian O(tổng số tác vụ), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.