Maximal Square
Find the largest square of 1s. dp[i][j] = side length of largest square with bottom-right corner at (i,j). If cell is 1: dp[i][j] = 1 + min(top, left, top-left). The min is the bottleneck, all three must support the square.
The square ending at a cell is limited by its three neighbours, so I take their minimum plus one. That single recurrence is the whole solution.
How It Works
Define dp[i][j] as the side length of the largest all-ones square whose bottom-right corner sits at cell (i, j). If the cell holds a 0, dp[i][j] is 0. If it holds a 1, then dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]): the square can only extend as far as the weakest of the squares ending above, to the left, and diagonally up-left. The answer is the maximum dp value seen, squared for area.
The min is the heart of the recurrence, all three neighboring squares must be large enough to support a bigger one, so the smallest is the bottleneck. Checking every possible square by brute force costs O(m*n*min(m,n)^2), while the DP is a single O(m*n) pass. Row-by-row filling means only the previous row is needed, compressing space to O(n).
Step-by-Step Visualization
Code
Tips & Gotchas
Practice Problems
- 1Maximal Square
- 2Count Square Submatrices with All Ones
- 3Largest Plus Sign
About the Matrix DP & BFS Pattern
Many grid problems are graph problems in disguise. Each cell is a node, adjacent cells are edges. Use BFS for shortest paths, DFS for connectivity, or DP for optimal paths.
For traversal: use direction arrays dx=[0,0,1,-1], dy=[1,-1,0,0]. For sorted matrix search, start from top-right corner. For grid DP, fill row by row. Current cell depends on top and left.
Common Matrix Interview Problems
- Spiral Matrix
- Rotate Image
- Search a 2D Matrix
- Number of Islands
- Maximal Square
- Set Matrix Zeroes
- Word Search
Frequently Asked Questions
Why take the minimum of three neighbors rather than just two?
The top and left neighbors alone cannot guarantee the diagonal region is filled. A square of side k ending at (i, j) needs squares of side k-1 ending at all three of (i-1, j), (i, j-1), and (i-1, j-1); dropping the diagonal term admits L-shaped regions with a hole at the corner.
Does the same recurrence find the maximal rectangle of ones?
No. Rectangles lack the symmetric bottleneck property that makes the square recurrence work. Maximal Rectangle is solved differently, typically by treating each row as a histogram base and running the largest-rectangle-in-histogram stack algorithm per row, for O(m*n) total.