平均等待时间
难度:
标签:
题目描述
代码结果
运行时间: 59 ms, 内存: 46.7 MB
/*
思路:
1. 初始化一个 AtomicInteger 变量来记录当前时间(currentTime)。
2. 使用 IntStream 来处理顾客数组:
- mapToLong 将每个顾客映射到其等待时间。
- 对于每个顾客,使用 compareAndSet 更新当前时间。
- 计算并累加总等待时间。
3. 最后返回总等待时间除以顾客数量,得到平均等待时间。
*/
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
public class AverageWaitingTimeStream {
public static double averageWaitingTime(int[][] customers) {
AtomicInteger currentTime = new AtomicInteger(0);
long totalWaitTime = IntStream.range(0, customers.length)
.mapToLong(i -> {
int arrivalTime = customers[i][0];
int cookingTime = customers[i][1];
int startTime = currentTime.updateAndGet(ct -> Math.max(ct, arrivalTime));
currentTime.addAndGet(cookingTime);
return startTime + cookingTime - arrivalTime;
})
.sum();
return (double) totalWaitTime / customers.length;
}
}
解释
方法:
此题解通过维护一个当前时间变量 k 来记录厨师何时完成当前顾客的菜。遍历每个顾客,比较厨师的空闲时间 k 与顾客到达时间 x。如果厨师在顾客到达前就空闲了,厨师将在顾客到达时立即开始制作,否则厨师会在处理完上一顾客后立即开始制作。每次厨师完成一个顾客的菜,更新时间 k,并计算该顾客的等待时间,存入 ans 列表。最后,计算所有顾客等待时间的平均值。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
题解中的循环逻辑是直接遍历customers列表,是否考虑了所有可能的边界情况,例如顾客数组为空或只有一个顾客的情况?
▷