方格染色

简介: 有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色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

来源:稀土掘金

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

目录
相关文章
|
1月前
lanqiaoOJ 211 剪格子
lanqiaoOJ 211 剪格子
13 3
|
3月前
|
算法 C++ Windows
空间射线与三角形相交算法的两种实现
空间射线与三角形相交算法的两种实现
42 0
|
6月前
|
算法 Java 测试技术
【广度优先搜索】【网格】【割点】1263. 推箱子
【广度优先搜索】【网格】【割点】1263. 推箱子
|
6月前
|
测试技术
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
|
人工智能 算法 BI
【线段树】找最长“白色”线段
【线段树】找最长“白色”线段
67 0
LeetCode 1812. 判断国际象棋棋盘中一个格子的颜色
给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。
123 0
|
机器学习/深度学习
1036. 逃离大迷宫 : BFS + 给定障碍物所能围成的最大面积
1036. 逃离大迷宫 : BFS + 给定障碍物所能围成的最大面积
|
算法
坚持写算法题的第四周(一)
坚持写算法题的第四周(一)
113 0
坚持写算法题的第四周(一)
|
SQL 算法 索引
坚持写算法题的第四周(二)
坚持写算法题的第四周(二)
120 0
坚持写算法题的第四周(二)
|
算法
坚持写算法题的第四周(五)
坚持写算法题的第四周(五)
108 0
坚持写算法题的第四周(五)