leetcode 1578 使绳子变成彩色的最短时间
一、题目描述




二、解题思路
整体思路
分析完题意,如果遇到颜色相同的两个气球,就要放掉时间最短的气球,涉及到的是相邻位置的问题,且只考虑相邻的两个气球,所以我们可以采用定长的滑动窗口来解决这个问题。
具体思路
(1)首先,声明变量。ret记录需要的最短时间,n为neededTime的长度,left和right用于维护窗口
(2)接着,当right<n时,即指针不越界时,进行循环:
1>如果两个"气球"颜色相同,就需要放掉一个气球,放掉时间较短的气球,更新ret为ret+min(neededTime[left],neededTime[right])。由于放掉了一个气球,所以剩下的是花费时间较长的气球,为了便于后续操作,将neededTime[right]更新为max(neededTime[left],neededTime[right]);
2>定长窗口后移,left++,right++;
(3)最后,返回ret,即为最短的时间。
三、代码实现
class Solution {
public:int minCost(string colors, vector<int>& neededTime) {//定长的滑动窗口(长度为2)int ret=0;int n=neededTime.size();int left=0,right=1;while(right<n){if(colors[left]==colors[right]){ret+=min(neededTime[left],neededTime[right]);neededTime[right]=max(neededTime[left],neededTime[right]);}left++;right++;}return ret;}
};