前往
大廳
主題

LeetCode - 1578. Minimum Time to Make Rope Colorful 解題心得

Not In My Back Yard | 2023-08-24 12:00:01 | 巴幣 0 | 人氣 163

題目連結:


題目意譯:
Alice 有 n 顆氣球排成一列在一條繩子上。你被給定一個索引值從 0 開始的字串 colors,其中 colors[i] 為第 i 顆氣球的顏色。

Alice 想要「多彩繽紛」的繩子。她不想要讓相鄰的氣球是相同的顏色,所以她向 Bob 尋求協助。Bob 可以從繩子上移除若干顆氣球讓它變成多彩繽紛的樣子。你被給定一個索引值從 0 開始整數陣列 neededTime,其中 neededTime[i] 為 Bob 從繩子上移除第 i 顆氣球所需的時間(以秒計)。

回傳 Bob 讓繩子變成多彩繽紛最少所需的時間。

限制:
n == colors.length == neededTime.length
1 ≦ n ≦ 10 ^ 5
1 ≦ neededTime[i] ≦ 10 ^ 4
colors 只包含小寫英文字母。



範例測資:
範例 1:
輸入: colors = "abaac", neededTime = [1,2,3,4,5]
輸出: 3
解釋: 在上圖中,'a' 為藍色、'b' 為紅色而 'c' 為綠色。
Bob 可以移除位於索引值 2 的藍色氣球。這需要 3 秒鐘。
現在沒有兩個相鄰的氣球是相同的顏色。總時間 = 3。

範例 2:
輸入: colors = "abc", neededTime = [1,2,3]
輸出: 0
解釋: 繩子已經是多彩繽紛的了。Bob 不需要從繩子上移除任何氣球。

範例 3:
輸入: colors = "aabaa", neededTime = [1,2,3,4,1]
輸出: 2
解釋: Bob 將移除位於索引值 0 和 4 的氣球。每顆氣球需要 1 秒來移除。
現在沒有兩個相鄰的氣球是相同的顏色。總時間 = 2。


解題思維:
其實就是很單純的貪心演算法(Greedy Algorithm)之策略——把每一群連續相同顏色的氣球留下移除所需時間最長者即可。

例如說範例 3 的 colors = "aabaa",neededTime = [1,2,3,4,1]。則會有三群氣球第一個 "aa" 、 "b" 和第二個 "aa"。則會有三群氣球第一個。對於第一個 "aa",位於索引值 1 的氣球之成本最高所以留下這顆氣球並移除其他即可;對於第二個 "aa" 也是同理,位於索引值 3 的氣球成本較高,所以要留下。而 "b" 只有一顆氣球所以不需移除任何氣球。因此總時間成本為 1 + 1 = 2。

其他測資也是同理。




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

創作回應

更多創作