85. 最大矩形
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了85. 最大矩形相关的知识,希望对你有一定的参考价值。
- 最大矩形
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例 1:
输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
输出:6
解释:最大矩形如上图所示
class Solution {
public int maximalRectangle(char[][] matrix) {
if(matrix.length == 0 || matrix[0].length ==0 ) return 0;
int[][] height = new int[matrix.length][matrix[0].length];
for(int i = 0;i<matrix.length;i++){
height[i][0] = matrix[i][0] - '0';
for(int j = 1;j< matrix[0].length;j++){
height[i][j] = matrix[i][j] == '1' ? height[i][j-1] + 1 : 0;
}
}
int max = 0;
for(int i = 0;i<matrix[0].length;i++){
int[] maxLeft = new int[matrix.length];
Stack<Integer> stack = new Stack<>();
stack.push(0);
int j = 1;
for(;j < matrix.length;j++){
if(height[j][i] > height[j-1][i]){
stack.push(j);
maxLeft[j] = j;
}else{
int index = 0;
while (stack.size() > 0 && height[j][i] <= height[stack.peek()][i]){
index = stack.pop();
max = Math.max(height[index][i] * (j - maxLeft[index]), max);
}
maxLeft[j] = stack.empty() ? 0 : maxLeft[index];
stack.push(j);
}
}
while (stack.size() > 0) {
int index = stack.pop();
max = Math.max(height[index][i] * (j - maxLeft[index]), max);
}
}
return max;
}
}
以上是关于85. 最大矩形的主要内容,如果未能解决你的问题,请参考以下文章