[动态规划] leetcode 85 Maximal Rectangle
problem:https://leetcode.com/problems/maximal-rectangle/
我的做法是把它转为一维的。先计算每一列的前缀和。
之后按行扫描,可以把每一行看作横坐标,当前的值看作高度,得到一个直方图一样的东西,接下来只需计算直方图中的最大矩形面积。时间复杂度O(N3)
class Solution { public: int maximalRectangle(vector<vector<char>>& matrix) { if (matrix.size() == 0) return 0; int m = matrix.size(); int n = matrix[0].size(); int max = 0; vector<vector<int>> dp(m, vector<int>(n, 0)); for (int i = 0;i<m;i++) { for (int j = 0;j<n;j++) { if (matrix[i][j] == '1') { if (i >= 1) dp[i][j] = dp[i - 1][j] + 1; else dp[i][j] = 1; } } } for (int i = 0;i < m;i++) { for (int j = 0;j < n;j++) { if (dp[i][j] > 0) { int height = dp[i][j]; for (int k = j;k >= 0;k--) { if (dp[i][k] == 0) break; if (dp[i][k] < height) height = dp[i][k]; int r = (j - k + 1) * height; if (r > max) max = r; } } } } return max; } };

浙公网安备 33010602011771号