2379. 得到 K 个黑块的最少涂色次数
题目链接:https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks
代码
ts
/**
* 2379. 得到 K 个黑块的最少涂色次数
* https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks
*/
function minimumRecolors(blocks: string, k: number): number {
let res = k;
let cnt = 0;
for (let i = 0; i < blocks.length; i++) {
if (blocks[i] === 'W') {
cnt++;
}
if (i - k >= 0 && blocks[i - k] === 'W') {
cnt--;
}
if (i - k + 1 >= 0) {
res = Math.min(res, cnt)
}
}
return res;
}思路
- 固定长度为
k的滑动窗口,统计窗口内白块数量cnt。 - 右指针进入窗口时,若是白块则
cnt++;左侧滑出窗口且为白块时cnt--,保持窗口长度恰为k。 - 窗口形成后用
res记录最小白块数,即最少涂色次数。 - 时间复杂度
,空间复杂度 。