zoukankan      html  css  js  c++  java
  • LeetCode_Maximal Rectangle

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

    分析: 对于每一列从右到左看成一个直方图,每个直方图计算最大面积的时间复杂度为O(n) 所以总的时间复杂度是O(n2

    class Solution {
    public:
        int maxArea(vector<int> &m)
        {
            int size = m.size();
            stack<int> s;
            int area, maxArea = 0;
            for(int i = 0; i< size; ++i)
            {
                if(s.empty() || m[i] >= m[s.top()] )
                {
                    s.push(i);
                    continue;
                }            
                int tp = s.top();
                s.pop();
                area = m[tp] * (s.empty() ? i : i -s.top() -1);
                maxArea = maxArea > area ? maxArea : area;
                --i;
            }
            
            while(!s.empty()){
                int    tp = s.top();
                s.pop();
                area = m[tp] * (s.empty() ? size: size - s.top() -1);
                maxArea = maxArea > area ? maxArea : area;
            }
            return maxArea;
        }
        int maximalRectangle(vector<vector<char> > &matrix) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int row = matrix.size();
            if(row < 1) return 0;
            int column = matrix[0].size();
            if(column <1) return 0;
            
            int area , res = 0;
            
            vector<int> m(row,0);
            for(int i = 0; i< column; ++i)
            {
                for(int j = 0; j< row; ++j)
                   if(matrix[j][i] == '0')
                            m[j] = 0;
                    else
                            m[j]++;
            
                area = maxArea(m);
                res = res > area ? res : area;
            }
            return res;
        }
    };
  • 相关阅读:
    论语学习系列(一)
    如何编译生成 dll
    Lua学习系列(二)
    Lua学习系列(一)
    Promise对象
    ... 扩展运算符
    class类
    proxy [ˈprɒksi] 代理
    HBuilder 打包流程
    Generator [ˈdʒenəreɪtə(r)] 函数结构
  • 原文地址:https://www.cnblogs.com/graph/p/3318497.html
Copyright © 2011-2022 走看看