文章目录

  • 1. 题目
  • 2. 解题

1. 题目

如果一个由 '0' 和 '1' 组成的字符串,是以一些 '0'(可能没有 '0')后面跟着一些 '1'(也可能没有 '1')的形式组成的,那么该字符串是单调递增的。

我们给出一个由字符 '0' 和 '1' 组成的字符串 S,我们可以将任何 '0' 翻转为 '1' 或者'1' 翻转为 '0'

返回使 S 单调递增的最小翻转次数

示例 1:
输入:"00110"
输出:1
解释:我们翻转最后一位得到 00111.示例 2:
输入:"010110"
输出:2
解释:我们翻转得到 011111,或者是 000111。示例 3:
输入:"00011000"
输出:2
解释:我们翻转得到 00000000。提示:
1 <= S.length <= 20000
S 中只包含字符 '0' 和 '1'

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flip-string-to-monotone-increasing
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 动态规划,dp0[i]表示在相应字符处以0结束的最小翻转次数
  • dp1[i]表示在相应字符处以1结束的最小翻转次数
  • 注意预处理得到前缀 1 的个数,见注释
class Solution {public:int minFlipsMonoIncr(string S) {int n = S.size();vector<int> one(n);for(int i = 0; i < n; ++i)one[i] = (i > 0 ? one[i-1] : 0) + (S[i]=='1');// 前缀 1 的个数vector<int> dp0(n+1, n), dp1(n+1, n);// dp0[i] 表示 以 0 结束递增的最小翻转次数// dp1[i] 表示 以 1 结束递增的最小翻转次数dp0[0] = dp1[0] = 0;for(int i = 0; i < n; ++i){if(S[i] == '0')//当前是0{dp0[i+1] = min((i > 0 ? one[i-1] : 0), dp0[i]);//以0结束 ,    把前面的 1 都翻过来  or   前面以0结束dp1[i+1] = min(dp0[i], dp1[i])+1;//以1结束,    前面以0或1结束都可以,再把当前0翻转为1,+1}else//当前是 1{dp0[i+1] = min((i > 0 ? one[i-1] : 0), dp0[i])+1;//以0结束 ,  把前面的 1 都翻过来  or  前面以0结束, 再把当前1翻转为0,+1dp1[i+1] = min(dp0[i], dp1[i]);//以1结束,    前面以0或1结束都可以,}}return min(dp0[n], dp1[n]);}
};

12 ms 9.1 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 926. 将字符串翻转到单调递增(动态规划)相关推荐

  1. leetcode 926. Flip String to Monotone Increasing | 926. 将字符串翻转到单调递增(前缀和)

    题目 https://leetcode.com/problems/flip-string-to-monotone-increasing/ 题解 方法1:前缀和 class Solution {publ ...

  2. LeetCode926. 将字符串翻转到单调递增

    如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是 单调递增 的. 给你一个二进制字符串 s,你可以将任何 0 翻转为 1 或者将 1 翻 ...

  3. LeetCode 85. 最大矩形(DP/单调递增栈,难)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...

  4. leetcode(力扣)738. 单调递增的数字||714. 买卖股票的最佳时机含手续费

    738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int n) {string strNum=to_string(n) ...

  5. leetcode 738. Monotone Increasing Digits | 738. 单调递增的数字(Java)

    题目 https://leetcode.com/problems/monotone-increasing-digits/ 题解 先把 num 的每一位转化为数组. 从左往右找第一个 前>后 的位 ...

  6. LeetCode 738. 单调递增的数字(贪心)

    1. 题目 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称 ...

  7. LeetCode 84. 柱状图中最大的矩形(单调递增栈)

    文章目录 1. 题目 2. 解题 1. 题目 题目链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是 ...

  8. leetcode第738题单调递增的数字

    leetcode第738题单调递增的数字 **贪心:**这个题目贪心的思路我是真找不见,和贪心相关联的地方在哪里呢? class Solution {public int monotoneIncrea ...

  9. 代码随想录算法训练营第08天 | LeetCode 344.反转字符串,541. 反转字符串2,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串

    LeetCode [344. 反转字符串] 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**. ...

最新文章

  1. Windows远程连接的实现
  2. win 2008 控制共享文件夹大小_win10如何一键网络共享
  3. 彻底解决网络爬虫遇到的中文乱码问题
  4. 出租WiFi到底靠不靠谱?
  5. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)
  6. 个人博客建站方案推荐
  7. 平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
  8. HDFC的完整形式是什么?
  9. win7重置密码的方法
  10. linux合并第一列相同的行,linux – 合并重复的行并在最后添加“N / A...
  11. HTML_DOM的node屬性
  12. 启用nf_conntrack模块,避免table full dropping
  13. 100个C语言经典小程序和C语言编写的小游戏
  14. 隐私问题不想用自己手机收验证码怎么办?
  15. c语言判断一个数是否是素数
  16. FPS 游戏飞天遁地原理
  17. 电脑ping,怎么ping网速,详细教您ping网络的方法
  18. Kubernetes PV与PVC
  19. Acdream 1424 Diversion 树链剖分+线段树
  20. 众海世纪影业:五一档19部影片“扎堆”,能否再次掀起观影热潮?

热门文章

  1. 利用dft的定义计算dft的matlab程序_CP2K教程系列之静态计算(Pymatflow篇)
  2. matlab穆尔,基于matlab(矩阵实验室)的倒立摆控制系统仿真(34页)-原创力文档
  3. java递归空瓶换饮料_问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? | 学步园...
  4. less is more,so 只记 less
  5. VisualStudioAddIn2017.vsix的下载安装和使用
  6. 假期第一次编程总结(改二)
  7. CCCC L1-002. 打印沙漏【图形打印】
  8. NodeJs实现下载Excel文件
  9. linux-0.11内核 调试教程+GCC源代码
  10. windows phone7 学习笔记14——地理位置服务与反应性扩展框架