Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #1188

Merged
merged 102 commits into from
Jan 20, 2025
Merged

Develop #1188

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
bb0ab4d
Automated commit 1
mah-shamim Jan 20, 2025
ade040a
Automated commit rollback 1
mah-shamim Jan 20, 2025
80e901a
Automated commit 2
mah-shamim Jan 20, 2025
b277aa7
Automated commit rollback 2
mah-shamim Jan 20, 2025
e3a431a
Automated commit 3
mah-shamim Jan 20, 2025
9e01360
Automated commit rollback 3
mah-shamim Jan 20, 2025
47589bd
Automated commit 4
mah-shamim Jan 20, 2025
be15eca
Automated commit rollback 4
mah-shamim Jan 20, 2025
aa50293
Automated commit 5
mah-shamim Jan 20, 2025
2715d78
Automated commit rollback 5
mah-shamim Jan 20, 2025
37a67e6
Automated commit 6
mah-shamim Jan 20, 2025
c4ece9b
Automated commit rollback 6
mah-shamim Jan 20, 2025
3a0a097
Automated commit 7
mah-shamim Jan 20, 2025
6c6c886
Automated commit rollback 7
mah-shamim Jan 20, 2025
db66e0f
Automated commit 8
mah-shamim Jan 20, 2025
5847467
Automated commit rollback 8
mah-shamim Jan 20, 2025
41a46a5
Automated commit 9
mah-shamim Jan 20, 2025
0c264c0
Automated commit rollback 9
mah-shamim Jan 20, 2025
c13535c
Automated commit 10
mah-shamim Jan 20, 2025
7c0774c
Automated commit rollback 10
mah-shamim Jan 20, 2025
8f843f1
Automated commit 11
mah-shamim Jan 20, 2025
88781af
Automated commit rollback 11
mah-shamim Jan 20, 2025
202800f
Automated commit 12
mah-shamim Jan 20, 2025
054ca0f
Automated commit rollback 12
mah-shamim Jan 20, 2025
6ccb120
Automated commit 13
mah-shamim Jan 20, 2025
cf7f26c
Automated commit rollback 13
mah-shamim Jan 20, 2025
c1165c3
Automated commit 14
mah-shamim Jan 20, 2025
3906058
Automated commit rollback 14
mah-shamim Jan 20, 2025
df9675e
Automated commit 15
mah-shamim Jan 20, 2025
ad8a00a
Automated commit rollback 15
mah-shamim Jan 20, 2025
ea2bf4d
Automated commit 16
mah-shamim Jan 20, 2025
96bee8d
Automated commit rollback 16
mah-shamim Jan 20, 2025
4f54a30
Automated commit 17
mah-shamim Jan 20, 2025
1860c3c
Automated commit rollback 17
mah-shamim Jan 20, 2025
265834c
Automated commit 18
mah-shamim Jan 20, 2025
539afdd
Automated commit rollback 18
mah-shamim Jan 20, 2025
fb58a2d
Automated commit 19
mah-shamim Jan 20, 2025
3a2b4d6
Automated commit rollback 19
mah-shamim Jan 20, 2025
633ad01
Automated commit 20
mah-shamim Jan 20, 2025
67b4684
Automated commit rollback 20
mah-shamim Jan 20, 2025
0b892a4
Automated commit 21
mah-shamim Jan 20, 2025
42c5d79
Automated commit rollback 21
mah-shamim Jan 20, 2025
162e84b
Automated commit 22
mah-shamim Jan 20, 2025
c471405
Automated commit rollback 22
mah-shamim Jan 20, 2025
3227556
Automated commit 23
mah-shamim Jan 20, 2025
5d2f29d
Automated commit rollback 23
mah-shamim Jan 20, 2025
1db3932
Automated commit 24
mah-shamim Jan 20, 2025
dec3ff7
Automated commit rollback 24
mah-shamim Jan 20, 2025
af85b30
Automated commit 25
mah-shamim Jan 20, 2025
818f38b
Automated commit rollback 25
mah-shamim Jan 20, 2025
d2d0005
Automated commit 26
mah-shamim Jan 20, 2025
c4dd4f1
Automated commit rollback 26
mah-shamim Jan 20, 2025
be94d21
Automated commit 27
mah-shamim Jan 20, 2025
484698c
Automated commit rollback 27
mah-shamim Jan 20, 2025
8fbd587
Automated commit 28
mah-shamim Jan 20, 2025
9caba9d
Automated commit rollback 28
mah-shamim Jan 20, 2025
7518344
Automated commit 29
mah-shamim Jan 20, 2025
8c5d99d
Automated commit rollback 29
mah-shamim Jan 20, 2025
c252233
Automated commit 30
mah-shamim Jan 20, 2025
f1f7a5d
Automated commit rollback 30
mah-shamim Jan 20, 2025
5f39103
Automated commit 31
mah-shamim Jan 20, 2025
1ecd6e1
Automated commit rollback 31
mah-shamim Jan 20, 2025
a6d6f7f
Automated commit 32
mah-shamim Jan 20, 2025
ceda638
Automated commit rollback 32
mah-shamim Jan 20, 2025
a8b2277
Automated commit 33
mah-shamim Jan 20, 2025
ba1a53d
Automated commit rollback 33
mah-shamim Jan 20, 2025
454d280
Automated commit 34
mah-shamim Jan 20, 2025
0538e3b
Automated commit rollback 34
mah-shamim Jan 20, 2025
94f9c12
Automated commit 35
mah-shamim Jan 20, 2025
5291204
Automated commit rollback 35
mah-shamim Jan 20, 2025
02e8ac4
Automated commit 36
mah-shamim Jan 20, 2025
5760a04
Automated commit rollback 36
mah-shamim Jan 20, 2025
906c90c
Automated commit 37
mah-shamim Jan 20, 2025
0154b22
Automated commit rollback 37
mah-shamim Jan 20, 2025
4c5a3ba
Automated commit 38
mah-shamim Jan 20, 2025
11d4329
Automated commit rollback 38
mah-shamim Jan 20, 2025
d346ba6
Automated commit 39
mah-shamim Jan 20, 2025
3ca9b32
Automated commit rollback 39
mah-shamim Jan 20, 2025
12634f2
Automated commit 40
mah-shamim Jan 20, 2025
f9d7552
Automated commit rollback 40
mah-shamim Jan 20, 2025
e9f5f64
Automated commit 41
mah-shamim Jan 20, 2025
1ce71d6
Automated commit rollback 41
mah-shamim Jan 20, 2025
7382971
Automated commit 42
mah-shamim Jan 20, 2025
f1362ae
Automated commit rollback 42
mah-shamim Jan 20, 2025
c3bcf4b
Automated commit 43
mah-shamim Jan 20, 2025
560a388
Automated commit rollback 43
mah-shamim Jan 20, 2025
22c710c
Automated commit 44
mah-shamim Jan 20, 2025
d6f0c58
Automated commit rollback 44
mah-shamim Jan 20, 2025
1e19181
Automated commit 45
mah-shamim Jan 20, 2025
df7e563
Automated commit rollback 45
mah-shamim Jan 20, 2025
f6d8681
Automated commit 46
mah-shamim Jan 20, 2025
8306823
Automated commit rollback 46
mah-shamim Jan 20, 2025
edf34d5
Automated commit 47
mah-shamim Jan 20, 2025
1ba0bf7
Automated commit rollback 47
mah-shamim Jan 20, 2025
609d8dc
Automated commit 48
mah-shamim Jan 20, 2025
22c00ff
Automated commit rollback 48
mah-shamim Jan 20, 2025
5078b7b
Automated commit 49
mah-shamim Jan 20, 2025
b1c4f10
Automated commit rollback 49
mah-shamim Jan 20, 2025
262254a
Automated commit 50
mah-shamim Jan 20, 2025
1210b04
Automated commit rollback 50
mah-shamim Jan 20, 2025
cbe8782
#1185, #1186 leetcode problems 002661-first-completely-painted-row-or…
mah-shamim Jan 20, 2025
67d65f2
Merge pull request #1187 from mah-shamim/002661-first-completely-pain…
mah-shamim Jan 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions algorithms/002661-first-completely-painted-row-or-column/README.md
mah-shamim marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
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:**

![grid1](https://assets.leetcode.com/uploads/2023/01/18/grid1.jpg)

- **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:**

![grid2](https://assets.leetcode.com/uploads/2023/01/18/grid2.jpg)

- **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.length`
- `n = mat[i].length`
- `arr.length == m * n`
- <code>1 <= m, n <= 10<sup>5</sup></code>
- <code>1 <= m * n <= 10<sup>5</sup></code>
- `1 <= arr[i], mat[r][c] <= m * n`
- All the integers of `arr` are **unique**.
- All the integers of `mat` are **unique**.


**Hint:**
1. Can we use a frequency array?
2. Pre-process the positions of the values in the matrix.
3. Traverse the array and increment the corresponding row and column frequency using the pre-processed positions.
4. 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

1. **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.

2. **Frequency Arrays**:
- We need two frequency arrays: one for the rows and one for the columns.
- As we go through the `arr` array, we will increment the frequency of the respective row and column for each element.

3. **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.

4. **Return the result**:
- The index where either a row or column is fully painted is our answer.

### Detailed Steps
1. Create a map `position_map` for each value in `mat` to its `(row, col)` position.
2. Create arrays `row_count` and `col_count` to track the number of painted cells in each row and column.
3. Traverse through `arr` and for each element, update the respective row and column counts.
4. 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](https://github.com/mah-shamim/leet-code-in-php/tree/main/algorithms/002661-first-completely-painted-row-or-column/solution.php)**

```php
<?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:

1. **Pre-processing positions**:
- We build a dictionary `position_map` where each value in `mat` is mapped to its `(row, col)` position. This helps in directly accessing the position of any value in constant time during the traversal of `arr`.

2. **Frequency counts**:
- We initialize `row_count` and `col_count` arrays with zeros. These arrays will keep track of how many times a cell in a specific row or column has been painted.

3. **Traversing the array**:
- For each value in `arr`, we look up its position in `position_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] == n` or `col_count[$col] == m`). If so, we return the current index `i`.

4. **Return Result**:
- The first index where either a row or column is completely painted is returned.

### Time Complexity:
- **Pre-processing**: We build `position_map` in `O(m * n)`.
- **Traversal**: We process each element of `arr` (which has a length of `m * n`), and for each element, we perform constant-time operations to update and check the row and column frequencies, which takes `O(1)` time.
- Overall, the time complexity is `O(m * n)`.

### Space Complexity:
- We store the positions of all elements in `position_map`, and we use `O(m + n)` space for the frequency arrays. Therefore, the space complexity is `O(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](https://github.com/mah-shamim/leet-code-in-php)** 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:

- **[LinkedIn](https://www.linkedin.com/in/arifulhaque/)**
- **[GitHub](https://github.com/mah-shamim)**
mah-shamim marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

class Solution {

/**
* @param Integer[] $arr
* @param Integer[][] $mat
* @return Integer
*/
function firstCompleteIndex($arr, $mat) {
$m = count($mat);
$n = count($mat[0]);

// Step 1: Preprocess the positions of elements in the matrix
$position_map = [];
for ($i = 0; $i < $m; $i++) {
for ($j = 0; $j < $n; $j++) {
$position_map[$mat[$i][$j]] = [$i, $j];
}
}

// Step 2: Initialize row and column counts
$row_count = array_fill(0, $m, 0); // Frequency of painted cells in each row
$col_count = array_fill(0, $n, 0); // Frequency of painted cells in each column

// Step 3: Traverse arr and update counts
foreach ($arr as $i => $value) {
list($row, $col) = $position_map[$value];

// Increment the row and column counts
$row_count[$row]++;
$col_count[$col]++;

// Step 4: Check if any row or column is fully painted
if ($row_count[$row] == $n || $col_count[$col] == $m) {
return $i;
}
}

// If no row or column is fully painted, return -1 (although the problem guarantees a solution)
return -1;
}
}