Đề bài
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ụ
Đầ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.
Đầ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.