25a2e86292cd4c6fa7ce290bd2052c3b.png

【题目】:2379. 得到 K 个黑块的最少涂色次数

class Solution {
public:
int minimumRecolors(string blocks, int k) {
int res = blocks.size();
int curWcount = 0; // 记录窗口内W字符的个数
for(int l = 0, r = 0; r < blocks.size(); ++r) {
if(blocks[r] == 'W') { // 滑窗内有字符W
curWcount++;
}
if(r - l + 1 == k) {
res = min(res, curWcount);
// 缩小窗口
if(blocks[l++] == 'W') {
curWcount--;
}
}
}
return res;
}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

题目想要求把白色块变成黑色块使得有k个连续的黑色块的最小次数,也就是求滑窗内白色块出现的最小次数。只要统计长度为k的滑窗内最少的白色字符数即可。