2672-有相同颜色的相邻元素数目
给你一个下标从 0 开始、长度为 n
的数组 nums
。一开始,所有元素都是 未染色 (值为 0
)的。
给你一个二维整数数组 queries
,其中 queries[i] = [indexi, colori]
。
对于每个操作,你需要将数组 nums
中下标为 indexi
的格子染色为 colori
。
请你返回一个长度与 queries
相等的数组 _ _answer
_ _ ,其中 _ _answer[i]
是前 i
个操作 之后
,相邻元素颜色相同的数目。
更正式的,answer[i]
是执行完前 i
个操作后,0 <= j < n - 1
的下标 j
中,满足 nums[j] == nums[j + 1]
且 nums[j] != 0
的数目。
示例 1:
**输入:** n = 4, queries = [[0,2],[1,2],[3,1],[1,1],[2,1]]
**输出:** [0,1,1,0,2]
**解释:** 一开始数组 nums = [0,0,0,0] ,0 表示数组中还没染色的元素。
- 第 1 个操作后,nums = [2,0,0,0] 。相邻元素颜色相同的数目为 0 。
- 第 2 个操作后,nums = [2,2,0,0] 。相邻元素颜色相同的数目为 1 。
- 第 3 个操作后,nums = [2,2,0,1] 。相邻元素颜色相同的数目为 1 。
- 第 4 个操作后,nums = [2,1,0,1] 。相邻元素颜色相同的数目为 0 。
- 第 5 个操作后,nums = [2,1,1,1] 。相邻元素颜色相同的数目为 2 。
示例 2:
**输入:** n = 1, queries = [[0,100000]]
**输出:** [0]
**解释:** 一开始数组 nums = [0] ,0 表示数组中还没染色的元素。
- 第 1 个操作后,nums = [100000] 。相邻元素颜色相同的数目为 0 。
提示:
1 <= n <= 105
1 <= queries.length <= 105
queries[i].length == 2
0 <= indexi <= n - 1
1 <= colori <= 105
本题视频讲解
见【周赛 344】 第三题,欢迎点赞投币!
思路
由于每次修改只会影响当前元素与其左右元素的关系,所以模拟即可。
用 cnt 统计相邻相同的个数。
代码实现时,可以先去掉当前元素对 cnt 的影响,修改颜色后,再加上当前元素对 cnt 的影响。
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
1 | func colorTheArray(n int, queries [][]int) []int { |
复杂度分析
- 时间复杂度:\mathcal{O}(n+q),其中 q 为 queries 的长度。
- 空间复杂度:\mathcal{O}(n)。
思考题
如果求的是最长连续同色长度要怎么做?
Comments