首页 > 其他分享 >926.将字符串翻转到单调递增

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

时间:2023-06-13 16:47:20浏览次数:57  
标签:cnt 递增 926 单调 字符串 dp 翻转

问题描述

926. 将字符串翻转到单调递增 (Medium)

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

输入:s = "00110"
输出:1
解释:翻转最后一位得到 00111.

示例 2:

输入:s = "010110"
输出:2
解释:翻转得到 011111,或者是 000111。

示例 3:

输入:s = "00011000"
输出:2
解释:翻转得到 00000000。

提示:

  • 1 <= s.length <= 10⁵
  • s[i]'0''1'

解题思路

dp[i]为将前i个字符翻转成单调递增的字符串所需要的最少翻转次数,cnt表示前i个字符中'1'的个数,其递推关系很容易分析:

  • s[i - 1] == '1'dp[i] = dp[i - 1];
  • s[i - 1] == '0'dp[i] = min(dp[i - 1] + 1, cnt);

代码

class Solution {
  public:
    int minFlipsMonoIncr(string s) {
        int cnt = 0, res = 0; // cnt为遍历中1的个数
        vector<int> dp(s.size() + 1, 0);
        for (int i = 1; i <= s.size(); i++) {
            if (s[i - 1] == '1') {
                cnt++;
                dp[i] = dp[i - 1];
            } else {
                dp[i] = std::min(dp[i - 1] + 1, cnt);
            }
        }
        return dp[s.size()];
    }
};

标签:cnt,递增,926,单调,字符串,dp,翻转
From: https://www.cnblogs.com/zwyyy456/p/17478041.html

相关文章

  • jmeter简单调用接口
    需求:Jmeter软件调用天气预报接口 网站:https://www.showapi.com/搜索第三方的天气接口: 0元,立即购买  注册:yidongzjq 密码:Nari.1234 ......
  • Codeforces Round #344 (Div. 2)-C. Report(单调栈)
    原题链接C.ReporttimelimitpertestmemorylimitpertestinputoutputEachmonthBlakegetsthereportcontainingmaineconomicindicatorsofthecompany"BlakeTech......
  • poj-2823 Sliding Window(单调队列)
    原题链接SlidingWindowTimeLimit: 12000MS MemoryLimit: 65536KTotalSubmissions: 54929 Accepted: 15814CaseTimeLimit: 5000MSDescriptionAnarrayofsize n ≤106 isgiventoyou.Thereisaslidingwindowofsize k whichismoving......
  • 51nod-1158 全是1的最大子矩阵(单调栈)
    原题链接1158 全是1的最大子矩阵基准时间限制:1 秒空间限制:131072 KB分值: 80 难度:5级算法题 收藏 关注Input第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。......
  • 揭秘报表新玩法!标配插件不再单调,如何用柱形图插件让你的报表瞬间高大上!
    摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言图表作为一款用于可视化数据的工具,可以帮助我们更好的分析和理解数据,并发现数据之间的关系和趋势。下面以柱形图为例介绍如何使用JavaScript在报表中引入图表......
  • 随感 - 感受凸性、决策单调性、次模性、四边性不等式之间千丝万缕的联系
    昨天为了一道最小割树去看了16年王文涛的集训队论文,今天刚刚翻看了上场ABC_Ex的题解,连续两次碰见了submodularity这个词,简单记记自己的理解。其实只是想整理下思路,收集一下看不懂的博客。以下内容随意且不严谨。submodularity次模性或者叫子模性是运筹学中的重要概念,它描......
  • 代码随想录算法训练营第十五天|● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉
    102.二叉树的层序遍历力扣题目链接(opensnewwindow)给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。思路:迭代法,非递归思路,借用队列,先进先出来达到层序遍历的效果。但写的过程中,我不知道该如何让同一层的数据都保存在一个数组里。看了题解发......
  • 用分治处理决策单调性问题
    决策单调性是dp转移方程的一种性质。一般而言,我们有许多方法优化一个具有决策单调性的转移方程。这里主要讲解一种用分治解决决策单调性问题的方法。引入先看一道题:CF868F我们可以想到一个\(O(n^2k)\)暴力。定义\(dp_{i,j}\)为令点\(i\)为第\(j\)段的最后一个点产......
  • 单调队列
    写法首先要有一个双端队列:structMy_dequeue{inthh=1,tt=0,q[N];voidclear(){hh=1;tt=0;}voidpush_front(intk){q[--hh]=k;}voidpush_back(intk){q[++tt]=k;}voidpop_front(){hh++;}voidpop_back(){tt--;}intfront(){returnq[hh];......
  • 2023-06-02:给定一个二进制数组 nums 和一个整数 k, k位翻转 就是从 nums 中选择一个长
    2023-06-02:给定一个二进制数组nums和一个整数k,k位翻转就是从nums中选择一个长度为k的子数组,同时把子数组中的每一个0都改成1,把子数组中的每一个1都改成0。返回数组中不存在0所需的最小k位翻转次数。如果不可能,则返回-1。子数组是数组的连续部分。输入:nums......