方格染色

简介: 有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。

一、题目描述:


有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。


如样例所示: s = RGRGR

我们涂染之后变成RRRGG满足要求了,涂染的个数为2,没有比这个更好的涂染方案。


示例:

示例 1:

输入: s = RRRR

输出:0


示例 2:

输入: s = RRGR

输出:1


示例 3:

输入: s = RGRG

输出:1---->将第二个R涂成G,从第一个R后面分割


二、思路分析:


使用两个变量分别记录分割线左右两边出现的R和G的次数。定义lCount记录分割线左边出现的G的次数,定义rCount记录分割线右边出现的R。

网络异常,图片无法展示
|

当我们获取到这两个值时,在循环时,只需要取这两个值和的最小值即可。

大体考虑之后,我们还需要考虑边界情况:


  • 当全是G时,我们需要把所有的R换成G,即rCount的值;
  • 当全书R时,将全部的R换成G,即分割线在最后一个R的后面。结果应该就为lCount的值。


优化


使用一次循环记录R出现的次数(lCount),将此时的rCount结果记录为右边都是'GGGG'的结果。

在记录G出现次数时可以和记录涂改个数放到同一个循环中。最后再求一下左半边为 'RRRR'的情况。


三、AC 代码:


function squareStaining(s) {
  let lCount = 0,
    rCount = 0
  let n = s.length
  for (let i = 0; i < n; i++) {
    rCount += s[i] === 'R' ? 1 : 0
  }
  let res = rCount // 整个s为右边 GGGG
  for (let i = 0; i < n - 1; i++) {
    lCount += s[i] === 'G' ? 1 : 0
    rCount -= s[i] === 'R' ? 1 : 0
    res = Math.min(res, lCount + rCount)
  }
  // 整个s为左半边 RRRR
  res = Math.min(res, lCount)
  return res
}


四、总结:


一开始可能会想到使用两个数组分别存放R和G出现的次数,但是为了简化操作,我们可以将出现的次数都是用两个变量来保存,通过循环,使各自增加或减少。


作者:ClyingDeng

链接:https://juejin.cn/post/6952678617327337480

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
人工智能 数据可视化 数据挖掘
【python】python员工薪资数据分析(源码+报告)【独一无二】
【python】python员工薪资数据分析(源码+报告)【独一无二】
|
存储 SQL 关系型数据库
【mysql】—— 表的操作
【mysql】—— 表的操作
148 0
油猴子! 给浏览器开个挂
油猴子是什么? 油猴(Tampermonkey)是浏览器的插件, 油猴子很特别, 它本身是一个无限手套(脚本管理器), 通过安装无限宝石(脚本), 能为我们提供超神的功能! 油猴有哪些超神的外挂? 1.
2313 0
|
机器学习/深度学习 人工智能 异构计算
|
Android开发
Android开源项目:捕鱼达人游戏源代码
 Android开源项目:捕鱼达人游戏源代码 这是一个Android上的开源项目:捕鱼达人游戏源代码,github上的地址链接是:https://github.com/zhangphil/Android-BuYuDaRenGame.git 内容和捕鱼达人类似。
3945 0
|
6天前
|
云安全 人工智能 自然语言处理
|
10天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
880 30