Local Maximums - codepath/compsci_guides GitHub Wiki
TIP102 Unit 1 Session 1 Advanced (Click for link to problem statements)
Problem Highlights
- 💡 Difficulty: Easy
- ⏰ Time to complete: 10 mins
- 🛠️ Topics: Arrays, Matrix Manipulation, Sliding Window
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
-
Q: What is the input to the function?
- A: The input is an
n x n
integer matrixgrid
.
- A: The input is an
-
Q: What is the expected output of the function?
- A: The function should return an
(n - 2) x (n - 2)
matrixlocal_maxes
where each element represents the maximum value found in the3 x 3
submatrix centered around each element(i+1, j+1)
ingrid
.
- A: The function should return an
-
Q: How do we determine the size of the output matrix?
- A: The output matrix
local_maxes
will be of size(n - 2) x (n - 2)
because the3 x 3
submatrix cannot be centered around the outermost rows and columns.
- A: The output matrix
-
Q: What if the input matrix is smaller than
3 x 3
?- A: The function assumes that
n >= 3
, so it does not handle cases where the grid is smaller than3 x 3
.
- A: The function assumes that
-
Q: What should the function return if the input grid has the minimum size of
3 x 3
?- A: For a
3 x 3
grid, the output will be a1 x 1
matrix containing the maximum value of the entire grid.
- A: For a
-
The function
local_maximums()
should take an n x n integer matrix grid and return an (n-2) x (n-2) integer matrix local_maxes where each element is the largest value in every contiguous 3 x 3 sub-matrix of grid.
HAPPY CASE
Input:
[
[9,9,8,1],
[5,6,2,6],
[8,2,6,4],
[6,2,2,2]
]
Expected Output:
[
[9,9],
[8,6]
]
Input:
[
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,2,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]
Expected Output:
[
[2,2,2],
[2,2,2],
[2,2,2]
]
EDGE CASE
Input:
[
[0,0,0],
[0,0,0],
[0,0,0]
]
Expected Output:
[
[0]
]
Input:
[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]
]
Expected Output:
[
[11,12],
[15,16]
]
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Iterate over each possible center of a 3 x 3 sub-matrix and find the maximum value within that sub-matrix. The resulting matrix will be of size (n-2)
x (n-2)
.
1. Initialize an empty list `local_maxes` to store the result.
2. Iterate through the matrix from row `1` to `n-2` (inclusive).
a. For each row, initialize an empty list `row` to store the maximums of the current row.
b. Iterate through the matrix from column `1` to `n-2` (inclusive).
i. Find the maximum value in the `3 x 3` sub-matrix centered at `(i+1, j+1)`.
ii. Append the maximum value to `row`.
c. Append `row` to `local_maxes`.
3. Return `local_maxes`.
⚠️ Common Mistakes
- Incorrectly indexing the 3 x 3 sub-matrix.
- Forgetting that the resulting matrix is of size (n-2) x (n-2).
I-mplement
Implement the code to solve the algorithm.
def local_maximums(grid):
n = len(grid)
local_maxes = []
for i in range(1, n - 1):
row = []
for j in range(1, n - 1):
max_value = max(
grid[i-1][j-1], grid[i-1][j], grid[i-1][j+1],
grid[i][j-1], grid[i][j], grid[i][j+1],
grid[i+1][j-1], grid[i+1][j], grid[i+1][j+1]
)
row.append(max_value)
local_maxes.append(row)
return local_maxes