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 - 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
        }
    }
题解 3 - 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