[leetcode]85. Maximal Rectangle(Java)

来源:互联网 发布:58上面网络销售可靠吗 编辑:程序博客网 时间:2024/06/05 14:37

https://leetcode.com/problems/maximal-rectangle/#/description


Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.

For example, given the following matrix:

1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0
Return 6.



package go.jacob.day703;import java.util.Stack;public class Demo1 {/* * 本体解法基于84. Largest Rectangle in Histogram * 把每一行看成求直方图中最大矩形面积问题 */public int maximalRectangle(char[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0)return 0;int m = matrix.length, n = matrix[0].length;int max = 0;int[] h = new int[n];for (int i = 0; i < m; i++) {Stack<Integer> stack = new Stack<Integer>();stack.push(-1);for (int j = 0; j < n; j++) {if (matrix[i][j] == '1')h[j] += 1;elseh[j] = 0;}for (int j = 0; j < n; j++) {while (stack.peek() != -1 && h[j] < h[stack.peek()]) {int top = stack.pop();max = Math.max(max, (j - 1 - stack.peek()) * h[top]);}stack.push(j);}while (stack.peek() != -1) {int top = stack.pop();max = Math.max(max, (n - 1 - stack.peek()) * h[top]);}}return max;}}


原创粉丝点击