IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode 926. Flip String to Monotone Increasing - 亚马逊高频题 -> 正文阅读

[数据结构与算法]LeetCode 926. Flip String to Monotone Increasing - 亚马逊高频题

A binary string is monotone increasing if it consists of some number of?0's (possibly none), followed by some number of?1's (also possibly none).

You are given a binary string?s. You can flip?s[i]?changing it from?0?to?1?or from?1?to?0.

Return?the minimum number of flips to make?s?monotone increasing.

Example 1:

Input: s = "00110"
Output: 1
Explanation: We flip the last digit to get 00111.

Example 2:

Input: s = "010110"
Output: 2
Explanation: We flip to get 011111, or alternatively 000111.

Example 3:

Input: s = "00011000"
Output: 2
Explanation: We flip to get 00000000.

Constraints:

  • 1 <= s.length <= 105
  • s[i]?is either?'0'?or?'1'.

题目给一个二进制字符串的单调递增性做了定义,如果字符串里所有‘0’(也可能不含‘0’)都在所有的‘1’前面(也可能不含‘1’),那么该二进制字符串就是单调递增的。

给定一个二进制字符串,你可以将字符串里的‘0’翻转成‘1’,或把‘1’翻转成‘0’。问最少要翻转多少次就可以使其变成单调递增的?

根据题目对单调性的定义,把一个二进制字符串变成单调递增的,最终所有‘0’都应该集中在字符串前面,所有‘1’都集中在字符串后面。也就是说我们可以在字符串的任意一个位置把字符串分成前后两部分,把前面部分的‘1’都翻转成‘0’,把后面部分的‘0’都翻转成‘1’,这样就可以把字符串变成单调递增的,因此本题就变成了算出每一个位置把字符串变成递增要翻转的次数,找出翻转次数最少的那个就是答案。对于一个位置,只要知道它前面部分‘1’的个数和后面部分‘0’的个数,两个和就是翻转次数,为了快速算出前后‘1’和‘0’的个数,可以像算数组前缀和一样,先遍历一遍字符串,统计出每个位置到头部‘1’的个数,遍历完之后就可以快速算出任意两个位置之间的‘0’或‘1’的个数。这样再遍历一次字符串,就可以直接算出每个位置前面部分‘1’的个数和后面部分‘0’的个数,由此知道翻转次数,在遍历过程中不断更新翻转次数最小值,遍历完得到的最小值就是把字符串变成单调递增的最少翻转次数。

class Solution:
    def minFlipsMonoIncr(self, s):
        n = len(s)
        res = n

        pre1 = [0] * (n + 1)
        for i in range(n):
            pre1[i + 1] = pre1[i] + int(s[i])

        for i in range(n + 1):
            res = min(res, pre1[i] + (n - i - (pre1[-1] - pre1[i])))

        return res

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:47:47  更:2022-03-12 17:48:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:57:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码