[leetCode]85. 最大矩形

在这里插入图片描述

动态规划

使用一个二维数组记录每个位置的最大宽度,这样就能在线性时间内计算得到以该点为右下角的最大矩形。

class Solution {
    public int maximalRectangle(char[][] matrix) {
        if (matrix.length == 0) return 0;
        int maxarea = 0;
        int rows = matrix.length;
        int cols = matrix[0].length;
        int[][] dp = new int[rows][cols];
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                if (matrix[i][j] == '1') {
                    dp[i][j] = j == 0 ? 1 : dp[i][j-1] + 1;
                    int width = dp[i][j];
                    for (int k = i; k >= 0; k--) {
                        width = Math.min(width, dp[k][j]);
                        maxarea = Math.max(maxarea, width * (i - k + 1));
                    }
                }
            }
        }
        return maxarea;
    }
}

posted @ 2020-10-02 10:49  消灭猕猴桃  阅读(66)  评论(0编辑  收藏  举报