1701 平均等待时间

题目描述:
有一个餐厅,只有一位厨师。你有一个顾客数组 customers ,其中 customers[i] = [arrivali, timei] :
arrivali 是第 i 位顾客到达的时间,到达时间按 非递减 顺序排列。
timei 是给第 i 位顾客做菜需要的时间。
当一位顾客到达时,他将他的订单给厨师,厨师一旦空闲的时候就开始做这位顾客的菜。每位顾客会一直等待到厨师完成他的订单。厨师同时只能做一个人的订单。厨师会严格按照 订单给他的顺序 做菜。
请你返回所有顾客需要等待的 平均 时间。与标准答案误差在 10-5 范围以内,都视为正确结果。

示例 1:
输入:customers = [[1,2],[2,5],[4,3]]
输出:5.00000
解释:

  1. 第一位顾客在时刻 1 到达,厨师拿到他的订单并在时刻 1 立马开始做菜,并在时刻 3 完成,第一位顾客等待时间为 3 - 1 = 2 。
  2. 第二位顾客在时刻 2 到达,厨师在时刻 3 开始为他做菜,并在时刻 8 完成,第二位顾客等待时间为 8 - 2 = 6 。
  3. 第三位顾客在时刻 4 到达,厨师在时刻 8 开始为他做菜,并在时刻 11 完成,第三位顾客等待时间为 11 - 4 = 7 。
    平均等待时间为 (2 + 6 + 7) / 3 = 5 。

示例 2:
输入:customers = [[5,2],[5,4],[10,3],[20,1]]
输出:3.25000
解释:

  1. 第一位顾客在时刻 5 到达,厨师拿到他的订单并在时刻 5 立马开始做菜,并在时刻 7 完成,第一位顾客等待时间为 7 - 5 = 2 。
  2. 第二位顾客在时刻 5 到达,厨师在时刻 7 开始为他做菜,并在时刻 11 完成,第二位顾客等待时间为 11 - 5 = 6 。
  3. 第三位顾客在时刻 10 到达,厨师在时刻 11 开始为他做菜,并在时刻 14 完成,第三位顾客等待时间为 14 - 10 = 4 。
  4. 第四位顾客在时刻 20 到达,厨师拿到他的订单并在时刻 20 立马开始做菜,并在时刻 21 完成,第四位顾客等待时间为 21 - 20 = 1 。
    平均等待时间为 (2 + 6 + 4 + 1) / 4 = 3.25 。

提示:
1 <= customers.length <= 105
1 <= arrivali, timei <= 104
arrivali <= arrivali+1

方法1:
主要思路:解题汇总链接
(1)模拟;
(2)对于每个顾客,找出厨师做该顾客的菜时的开始时间和结束时间,然后使用该结束时间减去顾客的到达时间,就是该顾客的需要等待的时间;
(3)统计出所有顾客需要等待的时间,求其平均数;

class Solution {
public:
    double averageWaitingTime(vector<vector<int>>& customers) {
        long cur_right=0;
        long counts_hour=0;
        for(auto& it:customers){
            if(it[0]>cur_right){//找出厨师做当前顾客的菜的开始时间
                cur_right=it[0];
            }
            cur_right+=it[1];//做完当前菜的结束时间
            counts_hour+=cur_right-it[0];//统计上给顾客的等待时间
        }
        return ( (double)counts_hour)/customers.size();//返回平均等待时间
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值