Average Waiting Time

给一个已经排序好的二维数组. 第一个数字表示顾客到达的时间, 第二个表示准备顾客order的时长, 求平均服务顾客的时间.

这个题就是分类讨论, 通过看例子, 知道如果前后两个人在同一时间到达, 那么后一个人的服务时间是要把给前边人准备的时间也算进去的. 然后再按照当前时间进行分类, 还是第二个例子, 能看出如果两个人不是同一时间到达, 但是两个人的准备时间不重叠, 那么只需要分别算服务时间, 如果重叠, 需要先找到上一个顾客的完成时间, 然后计算出当前顾客的服务时间, 所以还需要一个变量记录上一个顾客的完成时间.

class Solution {
    public double averageWaitingTime(int[][] customers) {
        int n = customers.length;
        int curTime = customers[0][0] + customers[0][1];
        int lastArriveTime = customers[0][0];
        double sum = customers[0][1];
        for(int i = 1; i < n; i++) {
            if(lastArriveTime == customers[i][0]) {
                sum += curTime + customers[i][1] - customers[i][0];
                curTime += customers[i][1];
            } else{
                lastArriveTime = customers[i][0];
                if(curTime < customers[i][0]){
                    curTime = customers[i][0] + customers[i][1];
                    sum += customers[i][1];
                }
                else{
                    sum += (curTime - customers[i][0]) + customers[i][1];
                    curTime = curTime + customers[i][1];
                }
            }
        }
        return  sum / n;
    }
}