前往
大廳
主題

LeetCode - 2391. Minimum Amount of Time to Collect Garbage 解題心得

Not In My Back Yard | 2023-07-19 12:00:06 | 巴幣 2 | 人氣 141

題目連結:


題目意譯:
你被給定一個索引值從 0 開始字串陣列 garbage,其中 garbage[i] 代表位於第 i 間房子的垃圾種類。garbage[i] 只由 'M' 、 'P' 和 'G' 這些字元組成,依序代表金屬(Metal)、紙類(Paper)和玻璃(Glass)之垃圾。撿起一單位任一種類的垃圾需要花費 1 分鐘。

你同時也被給定一個索引值從 0 開始整數陣列 travel,其中 travel[i] 為從第 i 間房子到第 i + 1 間房子所需花費的分鐘數。

現在城市裡有三台垃圾車,每一台各自負責撿起一種垃圾。每一台垃圾車從第 0 間房子出發,並且必須依照順序拜訪每一間房子;不過它們不需要真的把所有房子都拜訪過。

在任一時刻,只有一台垃圾車可以被使用。當有一台垃圾車正在行駛或是減垃圾的時候,其他兩台則不能做任何動作。

回傳撿起所有垃圾最少所需的分鐘數。

限制:
2 ≦ garbage.length ≦ 10 ^ 5
garbage[i] 只由字母 'M' 、 'P' 和 'G' 所組成。
1 ≦ garbage[i].length ≦ 10
travel.length == garbage.length - 1
1 ≦ travel[i] ≦ 100



範例測資:
範例 1:
輸入: garbage = ["G","P","GP","GG"], travel = [2,4,3]
輸出: 21
解釋:
紙類垃圾車:
1. 從第 0 間房子到第 1 間房子。
2. 撿起第 1 間房子的紙類垃圾。
3. 從第 1 間房子到第 2 間房子。
4. 撿起第 2 間房子的紙類垃圾。
總計需要花費 8 分鐘才能撿起所有紙類垃圾。
玻璃垃圾車:
1. 從第 0 間房子到第 1 間房子。
2. 從第 1 間房子到第 2 間房子。
3. 撿起第 2 間房子的玻璃垃圾。
4. 從第 2 間房子到第 3 間房子。
5. 撿起第 3 間房子的玻璃垃圾。
總計需要花費 13 分鐘才能撿起所有玻璃垃圾。
由於沒有金屬垃圾要撿,所以我們不需要動用到金屬垃圾車。
因此,總計需要花費 8 + 13 = 21 分鐘才能撿起所有垃圾。

範例 2:
輸入: garbage = ["MMM","PGM","GP"], travel = [3,10]
輸出: 37
解釋:
金屬垃圾車需要花費 7 分鐘才能撿起所有金屬垃圾。
紙類垃圾車需要花費 15 分鐘才能撿起所有紙類垃圾。
玻璃垃圾車需要花費 15 分鐘才能撿起所有玻璃垃圾。
總計需要花費 7 + 15 + 15 = 37 分鐘才能撿起所有垃圾。


解題思維:
就單純記錄每一種垃圾「最後」出現的房子(即擁有該種垃圾且索引值最大者)。然後對於每一種垃圾,從第 0 間房子一路走到對應的「最後」出現的房子,過程中把房子到房子之間所花的時間以及撿該該種垃圾的時間相加即可;而如果沒有某種垃圾就完全不出動該垃圾車即可(其所花時間為 0)。

最後把三種垃圾的時間加總即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作