【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口

简介: 【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口

得到 K 个黑块的最少涂色次数【LC2379】

给你一个长度为 n 下标从 0 开始的字符串 blocksblocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W''B' 分别表示白色和黑色。

给你一个整数 k ,表示想要 连续 黑色块的数目。

每一次操作中,你可以选择一个白色块将它 涂成 黑色块。

请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。

思路:

使用一个长度k 的滑动窗口,记录滑动窗口中白色块的数量,即为该滑动窗口中获得连续k kk个黑色块的操作数,枚举所有的滑动窗口,记录最少操作次数,返回即可


实现

class Solution {
    public int minimumRecolors(String blocks, int k) {
        int n = blocks.length();
        int count = 0;
        for (int i = 0; i < k; i++){
            if (blocks.charAt(i) == 'W'){
                count++;
            }
        }
        int min = count;
        for (int j = 0; j < n - k; j++){
            if (blocks.charAt(j) == 'W'){
                count--;
            }
            if (blocks.charAt(j + k) == 'W'){
                count++;
            }
            min = Math.min(count, min);
        }
        return min;
    }
}

image.png

目录
相关文章
|
6月前
【每日一题Day342】LC2578最小和分割 | 贪心
【每日一题Day342】LC2578最小和分割 | 贪心
45 0
|
6月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
54 0
|
6月前
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
59 0
|
6月前
|
vr&ar
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
72 1
|
6月前
|
存储
每日一题——滑动窗口的最大值
每日一题——滑动窗口的最大值
|
6月前
|
存储 算法
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
45 0
|
6月前
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
46 0
|
6月前
【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心
【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心
32 0
|
6月前
【每日一题Day198】LC1419数青蛙 | 计数
【每日一题Day198】LC1419数青蛙 | 计数
49 0
|
6月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
37 0