跳到主要内容

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

链接:2379.得到K个黑块的最少涂色次数
难度:Easy
标签:字符串、滑动窗口
简介:给你一个整数 k ,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它 涂成 黑色块。请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。

题解 1 - cpp

  • 编辑时间:2023-03-09
  • 执行用时:8ms
  • 内存消耗:6.2MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
int minimumRecolors(string blocks, int k) {
int n = blocks.size(), ans = 0x3f3f3f3f, cur = 0;
for (int i = 0; i < n; i++) {
cur += blocks[i] == 'W' ? 1 : 0;
if (i + 1 >= k) {
if (i + 1 > k) cur -= blocks[i - k] == 'W' ? 1 : 0;
ans = min(ans, cur);
}
}
return ans;
}
};

题解 2 - python

  • 编辑时间:2023-03-09
  • 执行用时:36ms
  • 内存消耗:14.9MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def minimumRecolors(self, blocks: str, k: int) -> int:
n, ans, cur = len(blocks), 0x3f3f3f3f, 0
for i in range(n):
cur += 1 if blocks[i] == 'W' else 0
if i + 1 >= k:
if i + 1 > k:
cur -= 1 if blocks[i - k] == 'W' else 0
ans = min(ans, cur)
return ans

题解 3 - rust

  • 编辑时间:2023-03-09
  • 内存消耗:2.1MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn minimum_recolors(blocks: String, k: i32) -> i32 {
let k = k as usize;
let blocks = blocks.chars().collect::<Vec<char>>();
let (n, mut ans, mut cur) = (blocks.len(), 0x3f3f3f3f, 0);
for i in 0..n {
cur += if blocks[i] == 'W' { 1 } else { 0 };
if i + 1 >= k {
if i + 1 > k {
cur -= if blocks[i - k] == 'W' { 1 } else { 0 };
}
ans = ans.min(cur);
}
}
ans
}
}