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]);
此處取最小值,能保證進行面積計算時可使用的最大寬度