Leetcode 85. Maximal Rectangle

单调栈\(O(n^2)\)解法

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        if (matrix.size() == 0) return 0;
        if (matrix[0].size() == 0) return 0;
        int n = matrix.size();
        int m = matrix[0].size();
        vector<vector<int>> dp(n, vector<int>(m + 1));
        vector<int> L(m + 1);
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                dp[i][j] = matrix[i][j] == '1';
                if (i > 0 && matrix[i][j] == '1' && matrix[i - 1][j] == '1')
                    dp[i][j] += dp[i - 1][j];
            }
            dp[i][m] = -1;
        }
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            stack<int> stk;
            for (int j = 0; j <= m; ++j) {
               L[j] = j;
               while (!stk.empty() && dp[i][j] <= dp[i][stk.top()]) {
                    L[j] = L[stk.top()];
                    ans = max(ans, (j - L[stk.top()]) * dp[i][stk.top()]);
                    stk.pop();
               }
               stk.push(j);
            }
        }
        return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/ToRapture/p/9568713.html