Leetcode: 85. 最大矩形(动态规划+暴力)

description

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

demonstration

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int x = matrix.size();
        if (x == 0)
            return 0;
        int y = matrix[0].size();
        int dp[x][y];
        int maxarea = 0;
        memset(dp, 0, sizeof(dp));
        for (int i = 0; i < x; ++i) {
            for (int j = 0; j < y; ++j) {
                if (matrix[i][j] == '1') {
                    dp[i][j] = j == 0? 1 : dp[i][j-1] + 1;
                    int witdh = dp[i][j];
                    for (int k = i; k >= 0; --k) {
                        witdh = min(witdh, dp[k][j]);
                        maxarea = max(maxarea, witdh * (i - k + 1));
                    }
                }
            }
        }
        return maxarea;
    }
};

要点:

witdh = min(witdh, dp[k][j]);

此处取最小值,能保证进行面积计算时可使用的最大宽度

猜你喜欢

转载自blog.csdn.net/yz_yz1234/article/details/105840591
今日推荐