2661.找出叠涂元素
【LetMeFly】2661.找出叠涂元素:多次映射
力扣题目链接:https://leetcode.cn/problems/first-completely-painted-row-or-column/
给你一个下标从 0 开始的整数数组 arr
和一个 m x n
的整数 矩阵 mat
。arr
和 mat
都包含范围 [1,m * n]
内的 所有 整数。
从下标 0
开始遍历 arr
中的每个下标 i
,并将包含整数 arr[i]
的 mat
单元格涂色。
请你找出 arr
中在 mat
的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i
。
示例 1:
输入:arr = [1,3,4,2], mat = [[1,4],[2,3]] 输出:2 解释:遍历如上图所示,arr[2] 在矩阵中的第一行或第二列上都被涂色。
示例 2:
输入:arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]] 输出:3 解释:遍历如上图所示,arr[3] 在矩阵中的第二列上都被涂色。
提示:
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
中的所有整数 互不相同
方法一:多次映射
思路:
遍历arr数组,将arr[now]映射到mat中的i行j列,并将i行中被命中的次数+1,j列中被命中的次数加一。
首次i行全部命中或j列全部命中则返回arr中当前下标now。
具体方法:
怎么快速将$arr[now]$快速映射到mat中的i行j列呢?可以使用一个“哈希表”:
开辟一个mat大小的一维数组a,数组中a[index]存放值为index - 1的mat的横纵下标
i, j
只需要遍历一遍mat数组即可得到“哈希表”数组a
怎么记录某行或某列的命中次数呢?
开辟两个数组,rowCnt[i]记录第i行的命中次数,colCnt[j]记录第j行的命中次数即可。
- 时间复杂度$O(len(arr))$,因为$len(arr) = size(mat)$
- 空间复杂度$O(len(arr))$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/134729002
2661.找出叠涂元素
https://blog.letmefly.xyz/2023/12/01/LeetCode 2661.找出叠涂元素/