2379.得到K个黑块的最少涂色次数

news2024/11/27 12:54:21

目录

题目描述

示例1:

示例2:

提示:

解题思路

滑动窗口法

概念

应用场景及特点:

思路

流程展示

代码

复杂度分析


题目描述

给你一个长度为 n 下标从 0 开始的字符串 blocksblocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W' 'B' 分别表示白色和黑色。
给你一个整数 k ,表示想要 连续 黑色块的数目。
每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。

示例1:

输入:blocks = "WBBWWBBWBW", k = 7
输出:3
解释
一种得到 7 个连续黑色块的方法是把第 0 ,3 和 4 个块涂成黑色。
得到 blocks = "BBBBBBBWBW" 。
可以证明无法用少于 3 次操作得到 7 个连续的黑块。
所以我们返回 3 。

示例2:

输入:blocks = "WBWBBBW", k = 2

输出:0

解释

不需要任何操作,因为已经有 2 个连续的黑块。

所以我们返回 0 。

提示:

  • n == blocks.length
  • 1 <= n <= 100
  • blocks[i] 要么是 'W' ,要么是 'B' 。
  • 1 <= k <= n

解题思路

滑动窗口法

概念

滑动窗口是一个在序列上移动的区间,通常由左右两个指针来界定这个区间的范围。通过移动指针来改变窗口的大小和位置,在窗口移动的过程中,根据问题的需求进行特定的计算和处理。

应用场景及特点

  1. 子数组 / 子串问题
  • 通常有两个指针,一个指向窗口的左端,一个指向窗口的右端。根据问题的具体要求,以特定的方式移动指针。
  • 例如,在寻找满足特定条件的最小子数组时,可能会先扩大窗口直到满足条件,然后再缩小窗口以找到最小的满足条件的窗口。
  1. 指针移动规则
  • 相比于暴力枚举所有可能的子数组 / 子串,滑动窗口法通常能够在更短的时间内找到解。因为它利用了子数组 / 子串的连续性和窗口的滑动特性,避免了重复计算。
  1. 高效性
  • 当需要在一个序列中找到满足特定条件的连续子数组或子串时,滑动窗口非常适用。例如,寻找和为特定值的连续子数组、含有特定字符的最长子串等。
  • 窗口的大小通常是动态变化的,根据问题的条件进行调整。

思路

  1. 初始化
  • 首先计算初始窗口(前k个字符)中白色块的数量,这个数量就是把这部分变成连续k个黑色块所需的最少操作次数。记为cnt_w(初始窗口中白色块的数量)和ans(最少操作次数)。
  1. 滑动窗口遍历
  • 使用滑动窗口遍历整个字符串。窗口大小为k
  • 每次窗口向右移动一个字符,新进入窗口的字符记为in_,离开窗口的字符记为out
  • 如果新进入窗口的字符是'W',则将cnt_w加 1,表示需要多一次操作把这个白色块变成黑色。
  • 如果离开窗口的字符是'W',则将cnt_w减 1,表示这个白色块不再在窗口内,之前为了它进行的操作可以不算了。
  • 在每次窗口移动后,更新ans为当前anscnt_w的较小值,因为我们要找的是最少操作次数。

流程展示

代码

class Solution:
    def minimumRecolors(self, blocks: str, k: int) -> int:
        ans = cnt_w = blocks[:k].count('W')
        for in_, out in zip(blocks[k:], blocks):
            cnt_w += (in_ == 'W') - (out == 'W')
            ans = min(ans, cnt_w)
        return ans

复杂度分析

  • 时间复杂度:O(n),其中 n 为 blocks 的长度。
  • 空间复杂度:O(1),仅用到若干额外变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vsphere连接ESXI主机创建虚拟机并安装操作系统

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

软碟通刻盘装系统出现错误代码0X800700D解决方案

install.wim大小超过4G&#xff0c;fat32不支持单个文件4G以上的文件。 可以按winR,在弹出的windows程序员运行窗口用cmd命令&#xff0c;调出命令提示符&#xff0c;然后执行convert H:/FS:NTFS命令即可&#xff08;H为我的U盘盘符&#xff0c;这个根据个人的盘符来定&#xf…

【Linux入门】Liunx权限

文章目录 前言一、用户的概念1.用户的概念2.用户切换1&#xff09;普通用户切换到超级用户2&#xff09;超级用户切换到普通用户 二、权限管理1.文件访问者的分类&#xff08;人&#xff09;2.文件类型和访问权限&#xff08;事物属性&#xff09; 三、文件类型1.基本权限2.文件…

开放式耳机好还是入耳式耳机好?本文章为你讲解

闲话少说&#xff0c;今天的这篇文章就是我个人整理出来对开放式耳机的一些认知分享&#xff0c;就是相当于一份开放式耳机的选购攻略&#xff0c;标准再多也没有使用感好来的直接&#xff01;感兴趣的朋友一起来了解 什么样的耳机是开放式的 首先区别于封闭式的入耳耳机&…

linux文件——用户缓冲区——概念深度理解、IO模拟实现

前言&#xff1a;本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题&#xff0c; 然后通过分析问题&#xff0c; 将缓冲区的概念与原理一步一步地讲解。同时&#xff0c; 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf&#xff0c; fprintf接口&#xff0c…

5IUX极简主页搜索源码/自定义你的浏览器主页

5IUX极简主页搜索源码&#xff0c;自定义你的浏览器主页。在使用各种导航首页时&#xff0c;我们时常被满屏的广告和资讯所困扰&#xff0c;这款源码可以让你自己设计一个不受干扰的浏览器主页。它不是镜像&#xff0c;也不是代理&#xff0c;只是用作浏览器主页&#xff0c;同…

最近算法岗笔试题整理

目录 1. 子串和子序列的区别&#xff1f; 2. 给一个featuremap 矩阵&#xff0c;行列都代表机器翻译用到的不同的单词的依赖程度&#xff0c;判断这个矩阵是哪个模型生成的&#xff1f; 3. 判断递归函数的时间复杂度 4. K-means 组关键数&#xff0c;选一个K得到SSE&#x…

对于初学者来说,如何选择一个合适的FPGA学习路径?

初学者入门还是相对简单的&#xff0c; 学fpga有专业要求&#xff1a; 一般是电子信息类、自动化类、计算机类等相关专业都是比较合适入行的。 FPGA岗位一般要求熟悉数字电路设计&#xff0c;以及C、verilog等&#xff0c;能够看懂原理图。 像其他专业也可以入行&#xff0c;但…

东南亚超市门店客流统计分析,了解客流高峰期,分析客户喜好

在东南亚的超市中&#xff0c;客流统计分析正成为提升运营效率和了解客户需求的重要手段。 一、客流统计系统集成 先进的客流统计系统通过在超市入口、关键通道和各个区域安装智能传感器&#xff0c;能够准确地记录进出超市的客流量。这些传感器与数据分析软件相结合&#xff0…

SQL基础——SQL分类

声明&#xff1a;以下内容为根据黑马数据库视频教程&#xff0c;个人整理的笔记&#xff0c;方便记录学习。 SQL基础之SQL分类 SQL分类详细知识导图SQL四种类型的全称和说明案例SQL语句编写DDL数据库操作表操作 DML添加数据修改数据删除数据 DQL条件查询聚合函数分组查询排序查…

众善企业助力脱贫攻坚,共建美好未来

在我国全面建设社会主义现代化国家的进程中&#xff0c;脱贫攻坚是一项重要的民生工程。众善企业作为社会的一份子&#xff0c;积极响应国家号召&#xff0c;以实际行动践行企业社会责任&#xff0c;为广大贫困地区提供帮扶&#xff0c;助力脱贫攻坚。 一、众善企业的责任担当 …

【IEEE】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024,10月18-20)

第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)定于2024年10月18-20日在中国杭州隆重举行。 本届会议将主要关注机器学习和计算机应用面临的新的挑战问题和研究方向&#xff0c;着力反映国际机器学习和计算机应用相关技术研究的最新进展。 ICMLCA 2024已上线至IEEE官网…

代码随想录算法训练营第二十二天(回溯 一)

开始学习回溯&#xff01; 回溯理论基础 代码随想录文章链接:代码随想录 文章摘要: 什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 在二叉树系列中&#xff0c;我们已经不止一次&#xff0c;提到了回溯。 回溯是递归的副产品&#xff0c;只…

贪吃蛇(Qt版)

目录 一、项目介绍 界面一&#xff1a;游戏大厅界面 界面二&#xff1a;关卡选择界面 界面三&#xff1a;游戏界面 最终游戏效果&#xff1a; 二、项目创建与资源配置 1. 创建项目 2. 添加项目资源文件 三、项目实现 1. 游戏大厅界面 2. 关卡选择界面 3. 游戏房间界…

重装后的电脑怎么分区?轻松优化存储空间

电脑重装系统是解决许多软件问题和提升性能的有效方法。然而&#xff0c;重装系统后&#xff0c;合理的硬盘分区不仅能提高数据管理效率&#xff0c;还有助于保护系统安全。本文将详细介绍如何在重装电脑后进行合理的分区&#xff0c;帮助您更好地管理和使用您的电脑。 一、了解…

傅里叶变换与拉普拉斯变换:联系、区别及其应用

1. 傅里叶变换和拉普拉斯变换的定义 1.1 傅里叶变换的定义 傅里叶变换是将时间域信号转换为频率域信号的数学工具&#xff0c;由正向和逆变换组成。它将信号分解为正弦波和余弦波的组合&#xff0c;适用于周期性和非周期性信号分析。 1.2 拉普拉斯变换的定义 拉普拉斯变换是…

武汉流星汇聚:跨境电商领航者,以自营经验赋能万企,共绘出海蓝图

在数字经济浪潮席卷全球的今天&#xff0c;跨境电商作为国际贸易的新引擎&#xff0c;正以前所未有的速度改变着全球商业格局。在这片充满机遇的蓝海中&#xff0c;武汉流星汇聚电子商务有限公司犹如一颗璀璨的流星&#xff0c;划破长空&#xff0c;以其独特的优势和卓越的成就…

数学强化| 李林880重点题速刷计划

快9月了&#xff0c;有的同学还没开始强化&#xff0c;进度确实有点慢了&#xff0c;有同学问&#xff1a; 刚开始强化&#xff0c;880题该如何快速刷完&#xff1f; 听我说&#xff0c;别急&#xff01;越是强化开始的晚&#xff0c;就越不能急&#xff0c;因为强化的作用有两…

易基因:泪腺RRBS+RNA-seq揭示Sjögren综合征相关干眼症的潜在基因|项目文章

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 Sjgren综合征&#xff08;Sjgren’s syndrome&#xff0c;SS&#xff09;相关干眼症是一种以泪腺&#xff08;lacrimal glands&#xff0c;LGs&#xff09;慢性炎症为特征的难治性自身免…

mysql InnoDB引擎各种隔离级别的加锁机制

文章目录 概要前置知识了解各种隔离锁的验证小结 概要 我们都知道&#xff0c;mysql的InnoDB引擎在各种隔离级别下的加锁机制都是有差异的&#xff0c;但是对于各种隔离级别下如何加锁大家可能不太了解&#xff0c;今天我就通过一篇文章去带领大家去分析一下各个隔离级别的加锁…