情境模擬: 平均等待時間 Average Waiting Time_Leetcode #1707

更新於 2024/07/12閱讀時間約 6 分鐘

題目敘述 Average Waiting Time

給定一個陣列,分別代表每位顧客的抵達時間廚師準備時間

請問平均的等待時間是多少?

等待時間定義為 客人開始真正用餐的時間 - 客人抵達的時間


測試範例

Example 1:

Input: customers = [[1,2],[2,5],[4,3]]
Output: 5.00000
Explanation:
1) The first customer arrives at time 1, the chef takes his order and starts preparing it immediately at time 1, and finishes at time 3, so the waiting time of the first customer is 3 - 1 = 2.
2) The second customer arrives at time 2, the chef takes his order and starts preparing it at time 3, and finishes at time 8, so the waiting time of the second customer is 8 - 2 = 6.
3) The third customer arrives at time 4, the chef takes his order and starts preparing it at time 8, and finishes at time 11, so the waiting time of the third customer is 11 - 4 = 7.
So the average waiting time = (2 + 6 + 7) / 3 = 5.

Example 2:

Input: customers = [[5,2],[5,4],[10,3],[20,1]]
Output: 3.25000
Explanation:
1) The first customer arrives at time 5, the chef takes his order and starts preparing it immediately at time 5, and finishes at time 7, so the waiting time of the first customer is 7 - 5 = 2.
2) The second customer arrives at time 5, the chef takes his order and starts preparing it at time 7, and finishes at time 11, so the waiting time of the second customer is 11 - 5 = 6.
3) The third customer arrives at time 10, the chef takes his order and starts preparing it at time 11, and finishes at time 14, so the waiting time of the third customer is 14 - 10 = 4.
4) The fourth customer arrives at time 20, the chef takes his order and starts preparing it immediately at time 20, and finishes at time 21, so the waiting time of the fourth customer is 21 - 20 = 1.
So the average waiting time = (2 + 6 + 4 + 1) / 4 = 3.25.

約束條件

Constraints:

  • 1 <= customers.length <= 10^5

輸入陣列長度介於1~十萬之間

  • 1 <= arrivali, timei <= 10^4

抵達時間和準備時間都介於1~一萬之間。

  • arrival<= arrivali+1

抵達時間一定是遞增序列


演算法 計算廚師的出餐時間


等待時間

=客人開始真正用餐的時間 - 客人抵達的時間

=廚師出餐的時間 - 客人抵達的時間


根據題意,
根據每個客人的抵達時間和廚師出餐時間去計算等待時間,最後再取平均即可。

要留意的是,廚師只有在出完前一位客人的餐點之後,才會給下一個客人出餐。


程式碼 計算廚師的出餐時間

class Solution:
def averageWaitingTime(self, customers: list[list[int]]) -> float:
n = len(customers)

time_waiting = 0
finished_prev = -math.inf

for customer_arrive, customer_prepare in customers:

arrive = customer_arrive

# chef starts cook this as soon as he finished last dish or customer arrived
start_cook = max(arrive, finished_prev)
end_time = start_cook + customer_prepare

# accumulate time of waiting
time_waiting += end_time - arrive

# update previous finished time
finished_prev = end_time

return time_waiting / n

複雜度分析

時間複雜度:O(n)

依序掃描每一位客人的抵達時間和廚師準備時間。

空間複雜度:O(1)

所用到的都是固定尺寸的臨時變數,所需空間為O(1)常數級別。


Reference:

[1] Average Waiting Time - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
過了多少日子,找回烹調的手感。
Thumbnail
在一間金碧輝煌服務至上的高級餐廳吃上1客5000元的精緻餐點 也許是過節需求或是生意需要 感受到的是商人的用心 ### 隔天在很餓的情況下吃了剛出爐的披薩 價格只有精緻餐點的1/10 但美味感受度卻是精緻餐點的20倍 感受到的是廚師的用心 ### 旅遊想吃海鮮就會想到海邊的餐廳
Thumbnail
他初次來這一帶,有點緊張。 坐定後他打開攜帶的筆電,叫出偽裝用的表單做做樣子開始等待。 十二點五分,附近的上班族一湧而入購買午餐。 櫃檯前的人龍出乎意料得長。
Thumbnail
掐指算算:這趟三個月的旅程,一共搬了15次家。     而填在兩個移動點之間的是「等待」,前一處十至十一點退房,下一處下午三點至四點才能入住,所以移動通常表示會有四到六小時的空檔「無處安身」。     有伴一起耗當然便利許多,泡泡咖啡廳聊天,輪流看守行李去上廁所,或附近小逛一會兒。
Thumbnail
三不五時會跟朋友、同學、同事約好見面,約好時間及地點,準時到是基本禮貌,展現尊重。如果很早就到,有些人會好心再發訊息,反正已佔到位子了,讓後面還沒到的人不用急;人急的時候呢,忙中就容易出錯,有時急著赴約,匆匆忙忙就忘了帶手機出門,結果也記不得約在那裡碰面,又得回去一趟。
Thumbnail
作者Only 【一天一千字,進化每一次】系列文章,講述了準時的人,其實是提早到了,進而討論態度決定人生的高度,而我們不僅僅要讚美美好的結果,更能誇獎好的態度,讓好的態度進入正循環。
Thumbnail
因為剛好是中午12點,我到了店面後看到都客滿,於是乖乖在外面等,等到有空位的時候再佔位,可是外面實在太熱了,我等了不到10分鐘就衝進去問是否還有位置,然後...店員就把我帶到地下一樓了,原來還有地下一樓!!!
Thumbnail
有一次與家人一起到一家早午餐店用餐.那天幾乎客滿。菜出得慢,不過還好,陸續送了來,大家開始用餐 吃到混搭風磚塊厚片拼盤時,我點的餐還沒送來,因為是一家人,所以我吃一點你的前餐,你吃一點他的主菜,大家都沒注意到這事,但我沒忘記.送烏輕紅茶豆漿來時,服務小姐很不好意思地詢問:是不是還有一份烏龍鍋燒未送
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
過了多少日子,找回烹調的手感。
Thumbnail
在一間金碧輝煌服務至上的高級餐廳吃上1客5000元的精緻餐點 也許是過節需求或是生意需要 感受到的是商人的用心 ### 隔天在很餓的情況下吃了剛出爐的披薩 價格只有精緻餐點的1/10 但美味感受度卻是精緻餐點的20倍 感受到的是廚師的用心 ### 旅遊想吃海鮮就會想到海邊的餐廳
Thumbnail
他初次來這一帶,有點緊張。 坐定後他打開攜帶的筆電,叫出偽裝用的表單做做樣子開始等待。 十二點五分,附近的上班族一湧而入購買午餐。 櫃檯前的人龍出乎意料得長。
Thumbnail
掐指算算:這趟三個月的旅程,一共搬了15次家。     而填在兩個移動點之間的是「等待」,前一處十至十一點退房,下一處下午三點至四點才能入住,所以移動通常表示會有四到六小時的空檔「無處安身」。     有伴一起耗當然便利許多,泡泡咖啡廳聊天,輪流看守行李去上廁所,或附近小逛一會兒。
Thumbnail
三不五時會跟朋友、同學、同事約好見面,約好時間及地點,準時到是基本禮貌,展現尊重。如果很早就到,有些人會好心再發訊息,反正已佔到位子了,讓後面還沒到的人不用急;人急的時候呢,忙中就容易出錯,有時急著赴約,匆匆忙忙就忘了帶手機出門,結果也記不得約在那裡碰面,又得回去一趟。
Thumbnail
作者Only 【一天一千字,進化每一次】系列文章,講述了準時的人,其實是提早到了,進而討論態度決定人生的高度,而我們不僅僅要讚美美好的結果,更能誇獎好的態度,讓好的態度進入正循環。
Thumbnail
因為剛好是中午12點,我到了店面後看到都客滿,於是乖乖在外面等,等到有空位的時候再佔位,可是外面實在太熱了,我等了不到10分鐘就衝進去問是否還有位置,然後...店員就把我帶到地下一樓了,原來還有地下一樓!!!
Thumbnail
有一次與家人一起到一家早午餐店用餐.那天幾乎客滿。菜出得慢,不過還好,陸續送了來,大家開始用餐 吃到混搭風磚塊厚片拼盤時,我點的餐還沒送來,因為是一家人,所以我吃一點你的前餐,你吃一點他的主菜,大家都沒注意到這事,但我沒忘記.送烏輕紅茶豆漿來時,服務小姐很不好意思地詢問:是不是還有一份烏龍鍋燒未送