【LeetCode每日一题】——2379.得到 K 个黑块的最少涂色次数

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

二【题目难度】

  • 简单

三【题目编号】

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

四【题目描述】

  • 给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[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

七【解题思路】

  • 本题利用经典的滑动窗口的思想
  • 首先计算前k个元素有多少个’W’
  • 然后遍历剩下的元素,以k为“窗口”大小,每次判断一个新进入“窗口”的元素,如果其为"W",那么需要变化的个数加一,否则不变
  • 上面的步骤相当于“窗口”右移,所以我们要考虑“窗口”最左边的元素,如果“窗口”最左边的元素为"W",那么将需要变化的个数减一,因为其被移出“窗口”了
  • 每次我们都取最小的值
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为传入的字符串的长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    public int minimumRecolors(String blocks, int k) {
        int sumW = 0;
        for(int i = 0;i<k;i++){
            if(blocks.charAt(i) == 'W'){
                sumW++;
            }
        }
        int res = sumW;
        for(int i = k;i<blocks.length();i++){
            if(blocks.charAt(i) == 'W'){
                sumW += 1;
            }
            if(blocks.charAt(i - k) == 'W'){
                sumW -= 1;
            }
            res = Math.min(res,sumW);
        }
        return res;
    }
}
  1. C语言版
int minimumRecolors(char * blocks, int k)
{
    int sumW = 0;
    for(int i = 0;i<k;i++)
    {
        if(blocks[i] == 'W')
        {
            sumW++;
        }
    }
    int res = sumW;
    for(int i = k;i<strlen(blocks);i++)
    {
        if(blocks[i] == 'W')
        {
            sumW++;
        }
        if(blocks[i - k] == 'W')
        {
            sumW--;
        }
        res = fmin(res,sumW);
    }
    return res;
}
  1. Python语言版
class Solution:
    def minimumRecolors(self, blocks: str, k: int) -> int:
        sumW = 0
        for i in range(k):
            if blocks[i] == 'W':
                sumW += 1
        res = sumW
        for i in range(k,len(blocks)):
            if blocks[i] == 'W':
                sumW += 1
            if blocks[i - k] == 'W':
                sumW -= 1
            res = min(res,sumW)
        return res
  1. C++语言版
class Solution {
public:
    int minimumRecolors(string blocks, int k) {
        int sumW = 0;
        for(int i = 0;i<k;i++)
        {
            if(blocks[i] == 'W')
            {
                sumW++;
            }
        }
        int res = sumW;
        for(int i = k;i<blocks.size();i++)
        {
            if(blocks[i] == 'W')
            {
                sumW++;
            }
            if(blocks[i - k] == 'W')
            {
                sumW--;
            }
            res = min(res,sumW);
        }
        return res;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述


http://www.niftyadmin.cn/n/192709.html

相关文章

ctf.show 愚人杯

1、奇怪的压缩包 下载附件解压提示要密码 使用010editor打开&#xff0c;发现frFlags 和 deFlags 的值都被修改了&#xff0c;这就会造成压缩包的伪加密&#xff0c; 将它们都改回0。 另存为一个文件再打开&#xff0c;没有密码提示了 解压发现图片并不完整&#xff0c;反正高…

华为不造车或因看到风险,新能源汽车行业将出现第二轮倒闭潮

华为方面强调华为品牌不得出现在汽车上面&#xff0c;此举引发行业热议&#xff0c;表面上是华为不造车的坚定&#xff0c;实际上可能是华为高层已看到新能源汽车行业已进入风险期&#xff0c;即是没有足够实力的新能源汽车企业可能出现倒闭潮。一、新能源汽车第一轮倒闭潮在上…

奇异值分解(SVD)和图像压缩

在本文中&#xff0c;我将尝试解释 SVD 背后的数学及其几何意义&#xff0c;还有它在数据科学中的最常见的用法&#xff0c;图像压缩。 奇异值分解是一种常见的线性代数技术&#xff0c;可以将任意形状的矩阵分解成三个部分的乘积&#xff1a;U、S、V。原矩阵A可以表示为&#…

为了整顿矿卡乱象,NVIDIA官方终于出手了

NVIDIA 前两年因为矿赚得盆满钵满&#xff0c;今年又赶上 AI 大爆发&#xff0c;其股价更是如坐火箭般一路高升。 在整个全球 PC 市场都不好过的情况下&#xff0c;这家伙愣是反向赢麻了。 隔壁 AMD 哭晕在厕所&#xff01; 这也是为啥 RTX30 系显卡发布好几年也不见明显降价…

Gigabyte GA-Z790-UD i9-13900黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。 硬件型号驱动情况 主板Dell-Latitude-E7490 处理器13th Gen Intel i9-13900已驱动 内存32GB * 2&#xff08;DDR5-6000&#xff09;已驱动 硬盘Samsung SSD 970 EVO 1TB已驱动 显卡AMD Radeon RX 6900 XT已驱动 声卡…

Cellchat和Cellphonedb细胞互作一些问题的解决(error和可视化)

今日的内容主要解决两个问题&#xff0c;一个是cellchat的代码报错问题&#xff0c;因为已经有很多人提出这个问题了。第二个是Cellphonedb结果的可视化&#xff0c;这里提供一种免费的很实用的快捷可视化方法。其实这些问题只要自己思考都是能明白的。 Cellchat和cellphonedb细…

Spring Boot+vue智慧公寓管理系统

文章目录 项目介绍主要功能截图:前台登录注册首页百度地图个人中心房间搜索服务反馈公寓管理用户管理后台首页我的订单商品详情支付方式选择支付成功页面部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面…

计算机组成原理(二)总线

一、总线的基本概念 1.1什么是总线 总线是连接各个部件的信息传输线&#xff0c;是 各个部件共享的传输介质 1.2为什么要用总线 早期计算机外部设备少时大多采用分散连接方式&#xff0c;不易实现随时增减外部设备。 为了更好地解决I/0设备和主机之间连接的灵活性问题&…