โจทย์
await Task.WhenAll(tasks) เริ่มงานในกลุ่มเดียวกันพร้อมกัน และจะทำงานต่อเมื่อหนึ่งที่ ช้าที่สุด เสร็จแล้วเท่านั้น ดังนั้นโปรแกรมที่ await หลายกลุ่มต่อกันจึงใช้เวลารวมเท่ากับผลรวมของงานที่ช้าที่สุดในแต่ละกลุ่ม
Implement when_all_total_time(groups), where groups[i] lists the durations of the tasks in group i.
Input
groups: กลุ่มของงานที่ await ตามลำดับ กลุ่มว่างจะเสร็จทันที
Output
Return the total time.
เงื่อนไข
0 ≤ จำนวนกลุ่ม ≤ 10,000
0 ≤ งานต่อกลุ่ม ≤ 1,000; 0 ≤ ระยะเวลา ≤ 10^6
ตัวอย่าง
อินพุต:
groups = [
[3, 1, 2],
[5],
[2, 2]
]
ผลลัพธ์ที่คาดหวัง:
expected = 10
อินพุต:
std::vector<std::vector<long long>> groups = {
{3, 1, 2},
{5},
{2, 2}
};
ผลลัพธ์ที่คาดหวัง:
long long expected = 10;
อินพุต:
long[][] groups = new long[][] {
new long[] {3, 1, 2},
new long[] {5},
new long[] {2, 2}
};
ผลลัพธ์ที่คาดหวัง:
long expected = 10;
คำอธิบาย
แต่ละกลุ่มใช้เวลาตามงานที่ช้าที่สุด: 3 + 5 + 2 = 10.
อินพุต:
groups = [
[],
[4, 7]
]
ผลลัพธ์ที่คาดหวัง:
expected = 7
อินพุต:
std::vector<std::vector<long long>> groups = {
{},
{4, 7}
};
ผลลัพธ์ที่คาดหวัง:
long long expected = 7;
อินพุต:
long[][] groups = new long[][] {
new long[] {},
new long[] {4, 7}
};
ผลลัพธ์ที่คาดหวัง:
long expected = 7;
คำอธิบาย
กลุ่มว่างใช้เวลา 0; กลุ่มที่สองใช้เวลา 7.
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
กลุ่มหนึ่งเสร็จเมื่องานที่ช้าที่สุดในกลุ่มเสร็จ
คำใบ้ 2
กลุ่มทำงานต่อกันทีละกลุ่ม เวลาจึงบวกกัน
คำใบ้ 3
กลุ่มว่างไม่เพิ่มเวลา
ความซับซ้อนที่คาดหวัง
เวลา O(จำนวนงานทั้งหมด), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน