# 0085. Maximal Rectangle ###### tags: `Leetcode` `Stack` `Hard` Link: https://leetcode.com/problems/maximal-rectangle/ ## 思路 是[1504. Count Submatrices With All Ones](https://hackmd.io/86AP-3gOTmeWP2XtzCr1bg)和[0084. Largest Rectangle in Histogram](https://leetcode.com/problems/largest-rectangle-in-histogram/)的结合体 ## Code ```java= class Solution { public int maximalRectangle(char[][] matrix) { int m = matrix.length, n = matrix[0].length; int[] h = new int[n]; int ans = 0; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(matrix[i][j]=='0') h[j]=0; else h[j]++; } int max = helper(h); ans = Math.max(ans, max); } return ans; } private int helper(int[] heights){ Stack<Integer> stack = new Stack<>(); int area = 0; for(int i=0; i<heights.length; i++){ while(!stack.isEmpty() && heights[stack.peek()]>heights[i]){ int h = heights[stack.pop()]; int w = i-(stack.isEmpty()?0:(stack.peek()+1)); area = Math.max(area, h*w); } stack.push(i); } while(!stack.isEmpty()){ int h = heights[stack.pop()]; int w = heights.length-(stack.isEmpty()?0:stack.peek()+1); area = Math.max(area, h*w); } return area; } } ```