2023-12-01每日一题
一、题目编号
2661. 找出叠涂元素
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1,m * n] 内的 所有 整数。
从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i] 的 mat 单元格涂色。
请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i 。
示例 1:
示例 2:
提示:
- m == mat.length
- n = mat[i].length
- arr.length == m * n
- 1 <= m, n <= 105
- 1 <= m * n <= 105
- 1 <= arr[i], mat[r][c] <= m * n
- arr 中的所有整数 互不相同
- mat 中的所有整数 互不相同
四、解题代码
class Solution {
unordered_map<int, int> line;
unordered_map<int, int> row;
unordered_map<int, int> row1;
unordered_map<int, int> line1;
public:
int firstCompleteIndex(vector<int>& arr, vector<vector<int>>& mat) {
int m = mat.size();
int n = mat[0].size();
int len = arr.size();
int judge_row = n;
int judge_line = m;
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j){
row1[mat[i][j]] = i;
line1[mat[i][j]] = j;
}
}
for(int i = 0; i < len; ++i){
int x = row1[arr[i]];
int y = line1[arr[i]];
row[x]++;
line[y]++;
if(row[x] == judge_row || line[y] == judge_line){
return i;
}
}
return 0;
}
};
五、解题思路
(1) 哈希表。