LeetCode-Maximal Rectangle

来源:互联网 发布:labview 算编程吗 编辑:程序博客网 时间:2024/06/07 02:02

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

Solution:

Code:

<span style="font-size:14px;">class Solution {public:    void convert(vector<vector<char> > &matrix, vector<vector<int> > &heights, const int &rows, const int &cols) {        for (int i = 0; i < rows; i++) {            for (int j = 0; j < cols; j++) {                for (int k = i; k >= 0; k--) {                    if (matrix[k][j] == '0')                        break;                    else                        heights[i][j]++;                }            }        }    }        int helper(vector<vector<int> > &heights, const int &row, const int &cols) {        int result = 0;        stack<int> stk;        for (int col = 0; col < cols;) {            if (stk.empty() || heights[row][stk.top()] <= heights[row][col])                stk.push(col++);            else {                int position = stk.top();                stk.pop();                result = max(result, heights[row][position]*(stk.empty()?col:(col-stk.top()-1)));            }        }        while (!stk.empty()) {            int position = stk.top();            stk.pop();            result = max(result, heights[row][position]*(stk.empty()?cols:(cols-stk.top()-1)));        }        return result;    }        int maximalRectangle(vector<vector<char> > &matrix) {        int rows = matrix.size();        if (rows == 0) return 0;        int cols = matrix[0].size();        vector<vector<int> > heights(rows, vector<int>(cols, 0));        convert(matrix, heights, rows, cols);        int result = 0;        for (int row = 0; row < rows; row++)            result = max(result, helper(heights, row, cols));        return result;    }};</span>


0 0