2661: First-Completely-Painted-Row-or-Column
Medium
This question is quite straightforward and does not involve any funny business.
In my algorithm, I started off by iterating through the
matrix mat
and creating a hashmap
mp
that maps each integer in the range
[1, m * n]
to their respective positions in the
matrix. This is possible as each integer present in
arr
and mat
are unique,
making a bijective hashmap mp
possible (and
necessary, as the integer’s position in arr
and
mat
is random).
Then, keep an array of integers counts
and
iterate through arr
, incrementing the count
of values painted in each respective row and column, until the
count of values painted in a row or column is
equal to n
or m
respectively.
Code:
class Solution {
public:
int firstCompleteIndex(vector<int>& arr, vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size();
<int, pair<int, int>> mp;
unordered_mapfor (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
[mat[i][j]] = {i, j};
mp}
}
<int> counts (m+n, 0);
vectorfor (int i = 0; i < arr.size(); ++i) {
int row = mp[arr[i]].first;
int col = mp[arr[i]].second;
++counts[row];
++counts[m+col];
if (counts[row] == n or counts[m+col] == m) {
return i;
}
}
return 0;
}
};