2661. First Completely Painted Row or Column
Difficulty: Medium
Topics: Array, Hash Table, Matrix
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 * n- All the integers of
arrare unique. - All the integers of
matare unique.
Hint:
- Can we use a frequency array?
- Pre-process the positions of the values in the matrix.
- Traverse the array and increment the corresponding row and column frequency using the pre-processed positions.
- If the row frequency becomes equal to the number of columns, or vice-versa return the current index.
Solution:
We can follow these steps:
Approach
-
Pre-process the positions of elements:
- First, we need to store the positions of the elements in the matrix. We can create a dictionary (
position_map) that maps each value in the matrix to its(row, col)position.
- First, we need to store the positions of the elements in the matrix. We can create a dictionary (
-
Frequency Arrays:
- We need two frequency arrays: one for the rows and one for the columns.
- As we go through the
arrarray, we will increment the frequency of the respective row and column for each element.
-
Check for Complete Row or Column:
- After each increment, check if any row or column becomes completely painted (i.e., its frequency reaches the size of the matrix's columns or rows).
- If so, return the current index.
-
Return the result:
- The index where either a row or column is fully painted is our answer.
Detailed Steps
- Create a map
position_mapfor each value inmatto its(row, col)position. - Create arrays
row_countandcol_countto track the number of painted cells in each row and column. - Traverse through
arrand for each element, update the respective row and column counts. - If at any point a row or column is completely painted, return that index.
Let's implement this solution in PHP: 2661. First Completely Painted Row or Column
<?php
/**
* @param Integer[] $arr
* @param Integer[][] $mat
* @return Integer
*/
function firstCompleteIndex($arr, $mat) {
...
...
...
/**
* go to ./solution.php
*/
}
// Example usage:
$arr = [1, 3, 4, 2];
$mat = [[1, 4], [2, 3]];
echo firstCompleteIndex($arr, $mat); // Output: 2
$arr = [2, 8, 7, 4, 1, 3, 5, 6, 9];
$mat = [[3, 2, 5], [1, 4, 6], [8, 7, 9]];
echo firstCompleteIndex($arr, $mat); // Output: 3
?>
Explanation:
-
Pre-processing positions:
- We build a dictionary
position_mapwhere each value inmatis mapped to its(row, col)position. This helps in directly accessing the position of any value in constant time during the traversal ofarr.
- We build a dictionary
-
Frequency counts:
- We initialize
row_countandcol_countarrays with zeros. These arrays will keep track of how many times a cell in a specific row or column has been painted.
- We initialize
-
Traversing the array:
- For each value in
arr, we look up its position inposition_map, then increment the corresponding row and column counts. - After updating the counts, we check if any row or column has reached its full size (i.e.,
row_count[$row] == norcol_count[$col] == m). If so, we return the current indexi.
- For each value in
-
Return Result:
- The first index where either a row or column is completely painted is returned.
Time Complexity:
-
Pre-processing: We build
position_mapinO(m * n). -
Traversal: We process each element of
arr(which has a length ofm * n), and for each element, we perform constant-time operations to update and check the row and column frequencies, which takesO(1)time. - Overall, the time complexity is
O(m * n).
Space Complexity:
- We store the positions of all elements in
position_map, and we useO(m + n)space for the frequency arrays. Therefore, the space complexity isO(m * n).
This solution should efficiently handle the problem within the given constraints.
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me:


Top comments (0)