LeetCode – Maximal Rectangle (Java)
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
Analysis
This problem can be converted to the "Largest Rectangle in Histogram" problem.
Java Solution
public int maximalRectangle(char[][] matrix) { int m = matrix.length; int n = m == 0 ? 0 : matrix[0].length; int[][] height = new int[m][n + 1]; int maxArea = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] == '0') { height[i][j] = 0; } else { height[i][j] = i == 0 ? 1 : height[i - 1][j] + 1; } } } for (int i = 0; i < m; i++) { int area = maxAreaInHist(height[i]); if (area > maxArea) { maxArea = area; } } return maxArea; } private int maxAreaInHist(int[] height) { Stack<Integer> stack = new Stack<Integer>(); int i = 0; int max = 0; while (i < height.length) { if (stack.isEmpty() || height[stack.peek()] <= height[i]) { stack.push(i++); } else { int t = stack.pop(); max = Math.max(max, height[t] * (stack.isEmpty() ? i : i - stack.peek() - 1)); } } return max; } |
<pre><code> String foo = "bar"; </code></pre>
-
saipabbathi
-
Swap Mup
-
Winfred Jj
-
Yinglei Zhang
-
Simon
-
Kyle
-
Kyle
-
Guangyu Wang