首页 > 其他分享 >2379. 得到 K 个黑块的最少涂色次数

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

时间:2023-04-08 22:57:18浏览次数:51  
标签:blocks 黑块 int 复杂度 cntW 2379 涂色

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

方法一:前缀和

解题思路

通过前缀和计算任意子区间 \([i, i + k - 1]\) 中字母 \(W\) 的数量,\(ans = min([i, i + k - 1].count('W'), i = 0, 1, ...)。\)

代码

class Solution {
public:
    int minimumRecolors(string blocks, int k) {
        int n = blocks.length();
        vector<int> cntW(n + 1); // cntW[i]表示前i个字母中W的个数,i从1开始
        for (int i = 1; i <= n; i ++ ) {
            if (blocks[i - 1] == 'W') cntW[i] = cntW[i - 1] + 1;
            else cntW[i] = cntW[i - 1];
        }
        int ans = INT_MAX;
        for (int i = 1; i + k - 1 <= n; i ++ ) {
            ans = min(ans, cntW[i + k - 1] - cntW[i - 1]);
        }
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(n)\)。

方法二:双指针-滑动窗口

解题思路

初始化两个指针\(l = 0,r = k - 1\),通过两个指针维护大小固定为\(k\)的滑动窗口\([l, r]\),所有窗口中所含字母\(W\)数量的最小值即为答案。

代码

class Solution {
public:
    int minimumRecolors(string blocks, int k) {
        int l = 0, r = k - 1;
        int cntW = 0; // 表示[l, r]之间字母W的数量
        for (int i = l; i <= r; i ++ )
            if (blocks[i] == 'W') cntW ++ ;
        int ans = INT_MAX;
        while (r < blocks.length()) {
            ans = min(ans, cntW);
            if (blocks[l] == 'W') cntW -- ;
            if (r + 1 < blocks.length() && blocks[r + 1] == 'W') cntW ++ ;
            l ++ ;
            r ++ ;
        }
        return ans;
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

标签:blocks,黑块,int,复杂度,cntW,2379,涂色
From: https://www.cnblogs.com/lxycoding/p/17299466.html

相关文章

  • 力扣简2379 得到第k个黑块的最少涂色次数
    20230310每日一题滑动窗口题 classSolution{publicintminimumRecolors(Stringblocks,intk){intres=Integer.MAX_VALUE,len=blocks.length();......
  • 2379. 得到 K 个黑块的最少涂色次数
    给你一个长度为n 下标从0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W'和 'B' 分别表示白色和黑色。给你一个整......
  • 力扣---2379. 得到 K 个黑块的最少涂色次数
    给你一个长度为n下标从0开始的字符串blocks,blocks[i]要么是'W'要么是'B',表示第i块的颜色。字符'W'和'B'分别表示白色和黑色。给你一个整数k,表示想要连......
  • P4170 [CQOI2007]涂色(思维好题)
    P4170[CQOI2007]涂色-洛谷|计算机科学教育新生态(luogu.com.cn)设DP[i][j]为完成(i-j)区间的最少涂鸦次数。考虑dp[i][j]的转移:重点:如果s[i]==s[j],dp[i][j]=min(dp[......
  • word样式多级标题变成黑块/黑线
      我在写文档(客户给的word模板)时,突然发现3级标题内容,变成了竖线。使用网上查询的“按组合键『Ctrl+Shift+S』,打开『应用样式』对话框,点击『重新应用』”,问题虽然......
  • 涂满它!(涂色问题 (原题:水叮当的舞步))题解
    F.涂满它!内存限制:256MiB时间限制:1000ms标准输入输出题目类型:传统评测方式:文本比较题目描述Flood-it是谷歌+平台上的非常好玩的一款游戏,游戏界面如下所示:在......
  • CQOI2007,洛谷P4710涂色
    题目描述假设你有一条长度为\(5\)的木版,初始时没有涂过任何颜色。你希望把它的\(5\)个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为\(5\)的字符串表示这个目......
  • #yyds干货盘点# 动态规划专题:涂色PAINT
    1.简述:描述假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。每次你可......
  • P4170 [CQOI2007]涂色
    #include<bits/stdc++.h>usingnamespacestd;#defineN111intf[N][N],n;charch[N];signedmain(){ memset(f,0x3f3f3f3f,sizeof(f)); scanf("%s",ch+1); n=st......
  • 02379计算机网络管理复习汇总01
    第1章网络管理概论一、网络管理系统的层次结构:  二、网络管理框架的共同特点:管理功能分为了管理站(Manager)和代理(Agent)两局部;为了存储管理信息提供数据库支持,例如......