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]);

此處取最小值,能保證進行面積計算時可使用的最大寬度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章