Medium
You are given a 0-indexed integer array arr, and an m x n integer matrix mat. arr and mat both contain all the integers in the range [1, m * n].
Go through each index i in arr starting from index 0 and paint the cell in mat containing the integer arr[i].
Return the smallest index i at which either a row or a column will be completely painted in mat.
Example 1:

Input: arr = [1,3,4,2], mat = [[1,4],[2,3]]
Output: 2
Explanation: The moves are shown in order, and both the first row and second column of the matrix become fully painted at arr[2].
Example 2:

Input: arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]]
Output: 3
Explanation: The second column becomes fully painted at arr[3].
Constraints:
m == mat.lengthn = mat[i].lengtharr.length == m * n1 <= m, n <= 1051 <= m * n <= 1051 <= arr[i], mat[r][c] <= m * narr are unique.mat are unique.public class Solution {
public int firstCompleteIndex(int[] arr, int[][] mat) {
int[] numMapIndex = new int[mat.length * mat[0].length + 1];
for (int i = 0; i < arr.length; i++) {
numMapIndex[arr[i]] = i;
}
int ans = Integer.MAX_VALUE;
for (int[] value : mat) {
int rowMin = Integer.MIN_VALUE;
for (int i : value) {
int index = numMapIndex[i];
rowMin = Math.max(rowMin, index);
}
ans = Math.min(ans, rowMin);
}
for (int i = 0; i < mat[0].length; i++) {
int colMin = Integer.MIN_VALUE;
for (int[] ints : mat) {
int index = numMapIndex[ints[i]];
colMin = Math.max(colMin, index);
}
ans = Math.min(ans, colMin);
}
return ans;
}
}