2023-12-01 LeetCode每日一题(找出叠涂元素)

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:
2023-12-01 LeetCode每日一题(找出叠涂元素)_第1张图片

示例 2:
2023-12-01 LeetCode每日一题(找出叠涂元素)_第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) 哈希表。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)