作者:windliang
链接:https://leetcode-cn.com/problems/maximal-rectangle/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-1-8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个作者的一个解法,用到了那个“柱状图中最大的矩形”。刚好我刚做过,牛哇!!!
个人微改:
import java.util.Arrays;
import java.util.Stack;
class maxArea{
public int maximal(char[][] matrix) {
if(matrix.length==0) {
return 0;
}
int[] heights = new int[matrix[0].length];
int max = 0;
for(int row=0;row<matrix.length;row++) {
for(int col=0;col<matrix[0].length;col++) {
if(matrix[row][col]=='1') {
heights[col] += 1;
}else {
heights[col] = 0;
}
}
max = Math.max(max,largestArea(heights));
}
return max;
}
public int largestArea(int heights[]) {
int n = heights.length;
int left[] = new int[n];
int right[] = new int[n];
Arrays.fill(right, n);
Stack<Integer> stack = new Stack<Integer>();
for(int i=0;i<n;i++) {
while(!stack.isEmpty() && heights[stack.peek()]>=heights[i]) {
right[stack.peek()] = i;
stack.pop();
}
left[i] = (stack.isEmpty()?-1:stack.peek());
stack.push(i);
}
int ans = 0;
for(int i=0;i<n;i++) {
ans = Math.max(ans, (right[i] - left[i] - 1)*heights[i]);
}
return ans;
}
}
public class MaximalRectangle {
public static void main(String args[]) {
char[][] matrix = new char[][]{{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'},{'1','0','0','1','0'}};
maxArea hah = new maxArea();
System.out.println(hah.maximal(matrix));
}
}

该博客介绍了一个使用柱状图中最大矩形算法解决LeetCode问题的解法,作者通过创建高度数组并结合栈来寻找最大矩形面积。代码实现包括`maximal`和`largestArea`两个方法,分别用于处理矩阵和计算最大面积。博客以一个具体的二维字符矩阵例子进行了演示。
6118

被折叠的 条评论
为什么被折叠?



