
leetcode 每日一题 LCP 19 秋叶收藏集
发布日期:2021-05-13 22:23:33
浏览次数:20
分类:精选文章
本文共 1178 字,大约阅读时间需要 3 分钟。
本题可以用线性规划的思路来求解,左边的红色树叶状态为 1 ,中间的黄色树叶状态为 2 ,右边的红色树叶状态为 3 。
status[i][j] 的含义是第 i 个树叶是第 j 个状态需要交换的最小次数。
三种状态转移的公式分别对应三种状态:(其中 isColor 指当前树叶颜色是否为 Color )- status[i][0] = status[i-1][0] + isYellow 因为第一种状态前面肯定也是第一种状态
- status[i][1] = min(status[i][0], status[i][1]) + isRed 第二种状态前面可以是第一种状态也可以是第二种状态,所以取最小
- status[i][2] = min(status[i][1], status[i][2]) + isYellow 第三种状态前面可以是第二种状态也可以是第三种状态,取最小
最后返回 status[len-1][2] 即为最小次数。
public class lcp19 { public int minimumOperations(String leaves) { int len = leaves.length(); int[][] status = new int[len][3]; status[0][0] = leaves.charAt(0)=='y'?1:0; status[0][1] = status[0][2] = status[1][2] = Integer.MAX_VALUE; for (int i = 1; i < len; ++i) { int isRed = leaves.charAt(i) == 'r' ? 1 : 0; int isYellow = leaves.charAt(i) == 'y' ? 1 : 0; status[i][0] = status[i - 1][0] + isYellow; status[i][1] = Math.min(status[i - 1][0], status[i - 1][1]) + isRed; if (i >= 2) { status[i][2] = Math.min(status[i - 1][1], status[i - 1][2]) + isYellow; } } return status[len-1][2]; }}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月29日 20时08分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
国内有哪些比较靠谱的云服务器?
2021-05-15
Java中有几种基本数据类型?它们分别占多大字节?
2021-05-15
Java中基本类型的转换规则
2021-05-15
Mapper 接口方法如何与注解里的 SQL 进行绑定的?
2021-05-15
python安装和配置(win10)
2021-05-15
重构函数(1)条件合并
2021-05-15
2020编码大赛(1)题目
2021-05-15
BitChanger语言
2021-05-15
Pythagorea(3)第16-21章
2021-05-15
纪念碑谷(1-5章)
2021-05-15
基数树(radix tree)
2021-05-15
58Q游戏(4)73(5)85(6)98(7)
2021-05-15
独立钻石棋详解
2021-05-15
106 多米诺骨牌(12)119(8)130(9)142(10)150(11)
2021-05-15
点亮细胞171-180
2021-05-15
C++ Primer Plus读书笔记:c++字符串
2021-05-15
CSU 1757: 火车入站(区间覆盖的最大覆盖深度)
2021-05-15
C++ Primer Plus读书笔记:循环读取(错误处理)
2021-05-15
skimage与cv2 安装失败的解决办法
2021-05-15