跳到主要内容

2672.有相同颜色的相邻元素数目

链接:2672.有相同颜色的相邻元素数目
难度:Medium
标签:数组
简介:给你一个下标从 0 开始、长度为 n 的数组 nums 。请你返回一个长度与 queries 相等的数组 answer ,其中 answer[i]是前 i 个操作 之后 ,相邻元素颜色相同的数目。

题解 1 - cpp

  • 编辑时间:2023-05-07
  • 执行用时:452ms
  • 内存消耗:197.9MB
  • 编程语言:cpp
  • 解法介绍:每次着色时统计对前后两个值得影响。
class Solution {
public:
vector<int> colorTheArray(int n, vector<vector<int>>& queries) {
vector<int> res(queries.size(), 0), list(n, 0);
if (n == 1) return res;
int prev = 0;
for (int i = 0; i < queries.size(); i++) {
int idx = queries[i][0], col = queries[i][1];
if (list[idx] != col) {
if (idx != n - 1) {
if (list[idx] == 0) {
if (col == list[idx + 1]) prev++;
} else {
if (list[idx] == list[idx + 1]) prev--;
else if (col == list[idx + 1]) prev++;
}
}
if (idx != 0) {
if (list[idx] == 0) {
if (col == list[idx - 1]) prev++;
} else {
if (list[idx] == list[idx - 1]) prev--;
else if (col == list[idx - 1]) prev++;
}
}
}
list[idx] = col;
res[i] = prev;
}
return res;
}
};

题解 2 - python

  • 编辑时间:2023-05-07
  • 执行用时:276ms
  • 内存消耗:47.6MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def colorTheArray(self, n: int, queries: List[List[int]]) -> List[int]:
res = [0] * len(queries)
list = [0] * n
if n == 1:
return res
prev = 0
for i in range(0, len(queries)):
idx = queries[i][0]
col = queries[i][1]
if list[idx] != col:
if idx != n - 1:
if list[idx] == 0:
if col == list[idx + 1]:
prev += 1
else:
if list[idx] == list[idx + 1]:
prev -= 1
elif col == list[idx + 1]:
prev += 1
if idx != 0:
if list[idx] == 0:
if col == list[idx - 1]:
prev += 1
else:
if list[idx] == list[idx - 1]:
prev -= 1
elif col == list[idx - 1]:
prev += 1
list[idx] = col
res[i] = prev
return res

题解 3 - rust

  • 编辑时间:2023-05-07
  • 执行用时:60ms
  • 内存消耗:8.8MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn color_the_array(n: i32, queries: Vec<Vec<i32>>) -> Vec<i32> {
let n = n as usize;
let mut res = vec![0; queries.len()];
let mut list = vec![0; n];
if n != 1 {
let mut prev = 0;
for i in 0..queries.len() {
let idx = queries[i][0] as usize;
let col = queries[i][1];
if list[idx] != col {
if idx != n - 1 {
if list[idx] == 0 {
if col == list[idx + 1] {
prev += 1;
}
} else {
if list[idx] == list[idx + 1] {
prev -= 1;
} else if col == list[idx + 1] {
prev += 1;
}
}
}
if idx != 0 {
if list[idx] == 0 {
if col == list[idx - 1] {
prev += 1;
}
} else {
if list[idx] == list[idx - 1] {
prev -= 1;
} else if col == list[idx - 1] {
prev += 1;
}
}
}
}
list[idx] = col;
res[i] = prev;
}
}
res
}
}