Re: [閒聊] 每日LeetCode
看板Marginalman作者JerryChungYC (JerryChung)時間5月前 (2023/12/28 03:05)推噓0(0推 0噓 1→)留言1則, 1人參與討論串587/719 (看更多)
原本用for跟List.pop() 不過在測資3就錯了 不能邊變動邊遞迴
後來就改成while跟計算位置 沒想到一次就過 好耶
Python Solution:
----------------------------------------
class Solution:
def minCost(self, colors: str, neededTime: List[int]) -> int:
minimum = 0
n1 = 0
n2 = 1
while n2 < len(colors):
if colors[n1] == colors[n2]:
if neededTime[n1] <= neededTime[n2]:
minimum += neededTime[n1]
n1 = n2
else:
minimum += neededTime[n2]
else:
n1 = n2
n2 += 1
return minimum
※ 引述《Rushia (みけねこ的鼻屎)》之銘言:
: https://leetcode.com/problems/minimum-time-to-make-rope-colorful/description
: 1578. Minimum Time to Make Rope Colorful
: 給你一個字串陣列 colors 表示氣球顏色,neededTime[] 表示移除特定位置氣球所需的
: 時間,求出最少要花多少時間可讓所有相鄰氣球不同色。
: 思路:
: 1.要對一個隊列分組,假如隊列是 aa bbb cc 就是要取: aa除了最大時間外的和
: + bbb 除了最大時間外的和 + cc ....,如果沒連續氣球就不管。
: 2.判斷前一個氣球是不是同色,如果是的話就加上耗時比較小的做為成本,並記住先前
: 耗時最大保留的氣球,如果不同色的話重置最大成本為當前耗時,遍歷到底即可。
: Java Code:
: -----------------------------------------
: class Solution {
: public int minCost(String colors, int[] neededTime) {
: int res = 0;
: int prevTime = neededTime[0];
: for (int i = 1; i < colors.length(); i++) {
: if (colors.charAt(i) == colors.charAt(i - 1)) {
: res += Math.min(prevTime, neededTime[i]);
: prevTime = Math.max(prevTime, neededTime[i]);
: } else {
: prevTime = neededTime[i];
: }
: }
: return res;
: }
: }
: -----------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.45.14.236 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1703703914.A.B5D.html
→
12/28 03:07,
5月前
, 1F
12/28 03:07, 1F
討論串 (同標題文章)