给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入: [ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"] ] 输出: 6
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ma…
解题思路

- 通过题解里看到这个图就一目了然。和柱状图中最大的矩形是一样的思路。
- 将二维数组转换成数组传入max方法。返回最后的面积。
public int maximalRectangle(char[][] matrix) {
if(matrix.length == 0) {
return 0;
}
int[] heights = new int[matrix[0].length];
int max = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if(matrix[i][j] == '1') {
heights[j] += 1;
} else {
heights[j] = 0;
}
}
max = Math.max(max, max(heights));
}
return max;
}
public int max(int[] heights) {
Stack<Integer> stack = new Stack<>();
stack.push(-1);
int max = 0;
for (int i = 0; i < heights.length; i++) {
while (stack.peek() != -1 && heights[stack.peek()] >= heights[i]) {
max = Math.max(max, heights[stack.pop()] * (i - stack.peek() - 1));
}
stack.push(i);
}
while (stack.peek() != -1) {
max = Math.max(max, heights[stack.pop()] * (heights.length - stack.peek() - 1));
}
return max;
}