跳到主要内容

2661.找出叠涂元素

链接:2661.找出叠涂元素
难度:Medium
标签:数组、哈希表、矩阵
简介:请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i 。

题解 1 - python

  • 编辑时间:2023-12-01
  • 执行用时:192ms
  • 内存消耗:49.78MB
  • 编程语言:python
  • 解法介绍:哈希计数。
class Solution:
def firstCompleteIndex(self, arr: List[int], mat: List[List[int]]) -> int:
n = len(mat)
m = len(mat[0])
map = {mat[i][j]: (i, j) for i in range(n) for j in range(m)}
rows = [0] * n
cols = [0] * m
for idx, num in enumerate(arr):
i, j = map[num]
rows[i] += 1
cols[j] += 1
if rows[i] == m or cols[j] == n: return idx

题解 2 - rust

  • 编辑时间:2023-12-01
  • 执行用时:40ms
  • 内存消耗:11.39MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn first_complete_index(arr: Vec<i32>, mat: Vec<Vec<i32>>) -> i32 {
let n = mat.len();
let m = mat[0].len();
let mut map = std::collections::HashMap::<i32, (usize, usize)>::new();
for i in 0..n {
for j in 0..m {
map.insert(mat[i][j], (i, j));
}
}
let mut rows = vec![0; n];
let mut cols = vec![0; m];
for (idx, num) in arr.into_iter().enumerate() {
let (i, j) = map.get(&num).unwrap();
rows[*i] += 1;
cols[*j] += 1;
if rows[*i] == m || cols[*j] == n {
return idx as i32;
}
}
0
}
}