得到 K 个黑块的最少涂色次数【LC2379】
给你一个长度为
n下标从 0 开始的字符串blocks,blocks[i]要么是'W'要么是'B',表示第i块的颜色。字符'W'和'B'分别表示白色和黑色。给你一个整数
k,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续
k个黑色块的 最少 操作次数。
-
思路:
使用一个长度为kkk的滑动窗口,记录滑动窗口中白色块的数量,即为该滑动窗口中获得连续kkk个黑色块的操作数,枚举所有的滑动窗口,记录最少操作次数,返回即可
-
实现
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; } }- 复杂度
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(1)O(1)O(1)
- 复杂度
利用滑动窗口求解LC2379:最少涂色次数得到连续K个黑块


被折叠的 条评论
为什么被折叠?



