当前位置: 首页 > news >正文

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

目录

一、题目内容和对应链接

1.题目对应链接 

2.题目内容

二、我的想法

三、其他人的题解


一、题目内容和对应链接

1.题目对应链接 

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

2.题目内容

给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W' 和 'B' 分别表示白色和黑色。

给你一个整数 k ,表示想要 连续 黑色块的数目。

每一次操作中,你可以选择一个白色块将它 涂成 黑色块。

请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。

示例 1:

输入:blocks = "WBBWWBBWBW", k = 7
输出:3
解释:
一种得到 7 个连续黑色块的方法是把第 0 ,3 和 4 个块涂成黑色。
得到 blocks = "BBBBBBBWBW" 。
可以证明无法用少于 3 次操作得到 7 个连续的黑块。
所以我们返回 3 。

示例 2:

输入:blocks = "WBWBBBW", k = 2
输出:0
解释:
不需要任何操作,因为已经有 2 个连续的黑块。
所以我们返回 0 。

提示:

  • n == blocks.length
  • 1 <= n <= 100
  • blocks[i] 要么是 'W' ,要么是 'B' 。
  • 1 <= k <= n

二、我的想法

1.最开始想的是,遍历 blocks ,先求出最大的连续 "B" 有多少个。如果这个数大于 k 就直接返回 0 ,否则再遍历。

之后又想干脆一次遍历,求出每块的 B 和 W 都有多少个,之后再看两个 B 中间的 W 又多少,连起来能不能满足 k 个数。

大致代码如下:

class Solution:def minimumRecolors(self, blocks: str, k: int) -> int:blockslen = len(blocks)maxcontinue = 0listblock = list()write = black = 0for i in range(0, blockslen):if i == 0:if blocks[0] == "W":write += 1flag = "W"else: black += 1flag = "B"else:if blocks[i] == "W":write += 1if black:listblock.append(black)black = 0else:black += 1 if write:listblock.append(write)maxcontinue = max(maxcontinue,black)write = 0if k <= maxcontinue:return 0if black:listblock.append(black)if write:listblock.append(write)print(flag,listblock)

但是明显不太行。

2.看了下题解的第二行字:滑动窗口,还没往下看我就一下子悟了:

我干脆设一个 i 和 j ,i 到 j 的长度为 k ,i 从 0 开始,j 的最长为 blocks 的长度。

就相当于限定 k 个块,这个块每次往后移动 1 下,判断移动过程中限定的字符串中有几个 W ,最小的 W 的个数即为所求

class Solution:def minimumRecolors(self, blocks: str, k: int) -> int:blockslen = len(blocks)minhandle = blocksleni = 0 j = i + kwhile j <= blockslen:white = blocks[i:j].count("W")minhandle = min(white, minhandle)i += 1j += 1return minhandle

三、其他人的题解

官方 : 滑动窗口

ylb : 滑动窗口

山寨功夫侠 : 前缀和

http://www.lryc.cn/news/36357.html

相关文章:

  • [深入理解SSD系列 闪存实战2.1.3] 固态硬盘闪存的物理学原理_NAND Flash 的读、写、擦工作原理
  • 总结:Linux内核相关
  • flutter工程创建过程中遇到一些问题。
  • 记录实现操作系统互斥锁的一次思考
  • 计算机SCI期刊的分值是什么意思? - 易智编译EaseEditing
  • 5MW风电永磁直驱发电机-1200V直流并网MATLAB仿真模型
  • 10 个常见的 JavaScript 面试问题以及如何回答它们
  • 字节跳动-今日头条后端开发一面面经
  • 再见 ETHDenver 2023
  • 阿里云dataworks表操作
  • 【latex】总结最近使用到的画图、表格及公式操作
  • excel表格数字乱码怎么恢复正常
  • 泰山众筹电商模式的分析
  • [算法]归并排序
  • 【UE4 RTS游戏】05-自定义日期和时间
  • ES的restful风格的HTTP方法详解
  • 第十三章 opengl之模型(导入3D模型)
  • html标签表示!
  • 前端优化,webpack打包删除无用文件,并附上批量删除文件脚本!非常好用
  • SpringCloud之 LoadBalancer负载均衡
  • idm如何下载种子文件和磁力链接 idm如何下载torrent
  • UE4 安卓AR 识别图片
  • 数字化服务环境下高校成人教育图书馆服务工作的发展方向
  • 以创作之名致敬女性开发者
  • 【ArcGIS学习记录03】--利用DEM数据提取河网溪流--加入大型河流数据及裁剪美化
  • VOC2012数据集取需要的几个类别
  • 主成分分析(PCA)原理
  • Git:合并一个仓库的某个分支到另一个仓库的某个分支
  • 工作记录:bi重构
  • java明文数据加密、脱敏方法总结