84. 柱状图中最大的矩形 - 力扣(LeetCode)
详细通俗的思路分析,多解法 - 最大矩形 - 力扣(LeetCode)
public int maximalRectangle(char[][] matrix) {
int len1 = matrix.length;
int len2 = matrix[0].length;
int[] heights = new int[len2];
int max = 0;
for (char[] chars : matrix) {
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '1') heights[i] += 1;
else heights[i] = 0;
}
max = Math.max(max, largestRectangleArea(heights));
}
return max;
}
public int largestRectangleArea(int[] height) {
Deque<Integer> deque = new ArrayDeque<>();
int max = 0;
int[] height0 = new int[height.length + 2];
System.arraycopy(height, 0, height0, 1, height.length);
for (int i = 0; i < height0.length; i++) {
while (!deque.isEmpty() && height0[deque.peek()] > height0[i]) {
max = Math.max(max, height0[deque.pop()] * (i - (deque.peek() == null ? 0 : deque.peek()) - 1));
}
deque.push(i);
}
return max;
}