贪心题目:使绳子变成彩色的最短时间
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题使绳子变成彩色的最短时间出处1578. 使绳子变成彩色的最短时间难度5 级题目描述要求Alice 把n \texttt{n}n个气球排列在一根绳子上。给定一个下标从0 \texttt{0}0开始的字符串colors \texttt{colors}colors其中colors[i] \texttt{colors[i]}colors[i]是第i \texttt{i}i个气球的颜色。Alice 想要把绳子装扮成彩色。她不希望两个连续的气球涂着相同的颜色所以她请 Bob 帮忙。Bob 可以从绳子上移除一些气球使绳子变成彩色。给定一个下标从0 \texttt{0}0开始的整数数组neededTime \texttt{neededTime}neededTime其中neededTime[i] \texttt{neededTime[i]}neededTime[i]是 Bob 从绳子上移除第i \texttt{i}i个气球需要的时间以秒为单位。返回 Bob 使绳子变成彩色需要的最少时间。示例示例 1输入colors abaac, neededTime [1,2,3,4,5] \texttt{colors abaac, neededTime [1,2,3,4,5]}colors abaac, neededTime [1,2,3,4,5]输出3 \texttt{3}3解释在上图中‘a’ \texttt{a}‘a’是蓝色‘b’ \texttt{b}‘b’是红色‘c’ \texttt{c}‘c’是绿色。Bob 可以移除下标2 \texttt{2}2的蓝色气球。这将花费3 \texttt{3}3秒。移除后不存在两个连续的气球涂着相同的颜色。总时间是3 \texttt{3}3。示例 2输入colors abc, neededTime [1,2,3] \texttt{colors abc, neededTime [1,2,3]}colors abc, neededTime [1,2,3]输出0 \texttt{0}0解释绳子已经是彩色的。Bob 不需要从绳子上移除任何气球。示例 3输入colors aabaa, neededTime [1,2,3,4,1] \texttt{colors aabaa, neededTime [1,2,3,4,1]}colors aabaa, neededTime [1,2,3,4,1]输出2 \texttt{2}2解释Bob 会移除下标0 \texttt{0}0和下标4 \texttt{4}4处的气球。每个气球各需要1 \texttt{1}1秒来移除。移除后不存在两个连续的气球涂着相同的颜色。总时间是1 1 2 \texttt{1} \texttt{1} \texttt{2}112。数据范围n colors.length neededTime.length \texttt{n} \texttt{colors.length} \texttt{neededTime.length}ncolors.lengthneededTime.length1 ≤ n ≤ 10 5 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{5}1≤n≤1051 ≤ neededTime[i] ≤ 10 4 \texttt{1} \le \texttt{neededTime[i]} \le \texttt{10}^\texttt{4}1≤neededTime[i]≤104colors \texttt{colors}colors仅由小写英语字母组成解法思路和算法将字符串colors \textit{colors}colors分成连续非空子片段每个子片段由相同字符组成且任意两个相邻子片段的字符都不同。移除气球使绳子上的任意两个相邻气球不同色等价于从字符串colors \textit{colors}colors中移除字符使剩余的任意两个相邻字符不同。为了使字符串colors \textit{colors}colors中剩余的任意两个相邻字符不同每个片段最多只能保留1 11个字符因此对于长度为k kk的片段需要移除k − 1 k - 1k−1个字符当k 1 k 1k1时也成立。为了使总时间最少对于长度为k kk的片段应移除用时最少的k − 1 k - 1k−1个气球保留用时最多的1 11个气球理由如下。假设移除每个气球的时间分别是t 1 t_1t1​到t k t_ktk​其中t k t_ktk​为最大值记T TT为移除当前片段中的用时最少的k − 1 k - 1k−1个气球且保留用时t k t_ktk​的气球的总用时。如果保留的气球不是用时t k t_ktk​的气球则将保留的气球的用时记为t j t_jtj​将此时移除k − 1 k - 1k−1个气球的总用时记为T ′ TT′则t j ≤ t k t_j \le t_ktj​≤tk​T ′ T t k − t j ≥ T T T t_k - t_j \ge TT′Ttk​−tj​≥T总用时不可能小于T TT。因此总时间最少的方法是移除用时最少的k − 1 k - 1k−1个气球保留用时最多的1 11个气球。根据上述分析可以使用贪心的思想计算使绳子变成彩色需要的最少时间。具体做法是从左到右遍历字符串colors \textit{colors}colors和数组neededTime \textit{neededTime}neededTime遍历过程中维护所有气球的总用时totalTime \textit{totalTime}totalTime、当前片段的气球的用时之和segmentTime \textit{segmentTime}segmentTime与当前片段的最大用时maxTime \textit{maxTime}maxTime。当遍历到下标i ii时执行如下操作。移除第i ii个气球需要的时间是neededTime [ i ] \textit{neededTime}[i]neededTime[i]将segmentTime \textit{segmentTime}segmentTime增加neededTime [ i ] \textit{neededTime}[i]neededTime[i]并用neededTime [ i ] \textit{neededTime}[i]neededTime[i]更新maxTime \textit{maxTime}maxTime。如果i n − 1 i n - 1in−1或colors [ i ] ≠ colors [ i 1 ] \textit{colors}[i] \ne \textit{colors}[i 1]colors[i]colors[i1]则下标i ii是当前片段的结束下标当前片段保留用时最多的1 11个气球且移除其余所有气球的最少时间是segmentTime − maxTime \textit{segmentTime} - \textit{maxTime}segmentTime−maxTime将totalTime \textit{totalTime}totalTime增加segmentTime − maxTime \textit{segmentTime} - \textit{maxTime}segmentTime−maxTime然后将segmentTime \textit{segmentTime}segmentTime和maxTime \textit{maxTime}maxTime都更新为0 00。遍历结束之后totalTime \textit{totalTime}totalTime即为使绳子变成彩色需要的最少时间。代码classSolution{publicintminCost(Stringcolors,int[]neededTime){inttotalTime0;intsegmentTime0;intmaxTime0;intncolors.length();for(inti0;in;i){segmentTimeneededTime[i];maxTimeMath.max(maxTime,neededTime[i]);if(in-1||colors.charAt(i)!colors.charAt(i1)){totalTimesegmentTime-maxTime;segmentTime0;maxTime0;}}returntotalTime;}}复杂度分析时间复杂度O ( n ) O(n)O(n)其中n nn是字符串colors \textit{colors}colors和数组neededTime \textit{neededTime}neededTime的长度。需要遍历字符串和数组一次计算最短时间每个下标处的操作时间是O ( 1 ) O(1)O(1)。空间复杂度O ( 1 ) O(1)O(1)。

相关新闻

H3 六边形分层地理空间索引系统:核心机制、索引结构与实战入门指南

H3 六边形分层地理空间索引系统:核心机制、索引结构与实战入门指南

GIS 【免费下载链接】h3 Hexagonal hierarchical geospatial indexing system 项目地址: https://gitcode.com/gh_mirrors/h3/h3 点击查看 免费下载 H3 是一个把全球划分为六边形单元(cell)的开源地理空间索引系统,由 H3 Core Li…

2026/10/7 9:21:14 阅读更多 →
CST导出SPICE模型全攻略:txt转cir网表实战与常见坑

CST导出SPICE模型全攻略:txt转cir网表实战与常见坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:20:13 阅读更多 →
位运算实战指南:用bit压缩状态与优化性能

位运算实战指南:用bit压缩状态与优化性能

前阵子我在一个高并发推荐服务里做性能优化,最关键的改动之一,是把若干个boolean状态标记压缩进了一个int。也就是让每个标记只占一个bit——bits,计算机世界最小的积木——而不是一个完整的布尔字段。这个改动让核心接口时延降了四分之一&am…

2026/10/7 9:20:13 阅读更多 →

最新新闻

Pendulum 时区完全指南:DST 过渡、归一化与 fold 语义详解

Pendulum 时区完全指南:DST 过渡、归一化与 fold 语义详解

后端 【免费下载链接】pendulum Python datetimes made easy 项目地址: https://gitcode.com/gh_mirrors/pe/pendulum 点击查看 免费下载 导读 时区是任何 datetime 库都无法回避的复杂话题,尤其在夏令时(DST)切换的"弹簧前…

2026/10/7 9:56:39 阅读更多 →
Hyperf 异步队列(async-queue)实战指南:从配置、投递到任务流转与源码原理

Hyperf 异步队列(async-queue)实战指南:从配置、投递到任务流转与源码原理

后端微服务 【免费下载链接】hyperf 🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease. 项目地址: https://gitcode.com/gh_mirrors/hy/hyperf 点击查看 免费下载 本指南基于 Hyp…

2026/10/7 9:56:39 阅读更多 →
STC单片机C语言开发入门:从寄存器操作到串口通信实战

STC单片机C语言开发入门:从寄存器操作到串口通信实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:56:39 阅读更多 →
SpringBoot+Vue书评系统数据流贯通实战指南

SpringBoot+Vue书评系统数据流贯通实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:56:39 阅读更多 →
Flink SQL MySQl数据同步到ES数量未对齐的问题

Flink SQL MySQl数据同步到ES数量未对齐的问题

目录问题背景排除过程排除出未同步的商品数据打开ES新增修改日志打开Flink debug日志发现解决方案参考问题背景 使用Flink SQL把MySQL的商品数据同步到ES,发现ES的数据条数总是会少一些。SQL大概是这样的: -- 商品数据以及这个商品对应实物最小克重 IN…

2026/10/7 9:56:39 阅读更多 →
Angel 中的因子分解机(FM)算法:原理、参数配置与分布式训练实战

Angel 中的因子分解机(FM)算法:原理、参数配置与分布式训练实战

人工智能机器学习分布式训练图计算后端 【免费下载链接】angel A Flexible and Powerful Parameter Server for large-scale machine learning 项目地址: https://gitcode.com/gh_mirrors/an/angel 点击查看 免费下载 因子分解机(Factorization Machine…

2026/10/7 9:55:38 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →