85. 最大矩形

 

 

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int m=matrix.size();
        int n=matrix[0].size();
        vector<vector<int>> left(m, vector<int>(n,0));
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j] =='1')
                    left[i][j] = (j>=1?left[i][j-1]:0)+1;
            }
        }
        int area=0;
        int w,h;
        w=h=0;
        int res=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(left[i][j]){
                    w=left[i][j];
                    for(int k=i;k>=0;k--){
                       h=i-k+1;
                       w=min(w, left[k][j]);
                       res=max(res, w*h);
                    }
                }  
            }
        }
        return res;
    }
};

方法二:

求矩阵面积最大的就是用单调栈(公共模版),固定宽度,让高度尽可能大。

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int m=matrix.size();
        int n=matrix[0].size();
        vector<vector<int>> left(m, vector<int>(n,0));
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j] =='1')
                    left[i][j] = (j>=1?left[i][j-1]:0)+1;
            }
        }
        
        int area, w,h;
        area=0;
        for(int j=0;j<n;j++){
            vector<int> up(m,0);
            vector<int> down(m,0);
            stack<int> stk;
            for(int i=0;i<m;i++){
                while(stk.size()&&left[stk.top()][j]>=left[i][j])
                    stk.pop();
                up[i]=(stk.size()==0?-1:stk.top());
                stk.push(i);
            }
            stk=stack<int>();
            for(int i=m-1;i>=0;i--){
                while(stk.size()&&left[stk.top()][j]>=left[i][j])
                    stk.pop();
                down[i] = (stk.size()==0?m:stk.top());
                stk.push(i);
            }
            for(int i=0;i<m;i++){
                int height=down[i]-up[i]-1;
                int width=left[i][j];
                area = max(area, height*width);
            }
        }
        return area;

    }
};

相关推荐

  1. 85. 矩形

    2024-06-18 15:30:07       62 阅读
  2. 算法37:矩形(力扣8485题)---单调栈

    2024-06-18 15:30:07       55 阅读
  3. LeetCode 84. 柱状图中矩形

    2024-06-18 15:30:07       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 15:30:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 15:30:07       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 15:30:07       82 阅读
  4. Python语言-面向对象

    2024-06-18 15:30:07       91 阅读

热门阅读

  1. MySQL触发器基本结构

    2024-06-18 15:30:07       28 阅读
  2. 大文件上传实现

    2024-06-18 15:30:07       28 阅读
  3. 前端BUG记录-a-spin和a-pagination

    2024-06-18 15:30:07       33 阅读
  4. 探索 HNSW:分层导航小世界算法的深度解析

    2024-06-18 15:30:07       33 阅读
  5. 正则表达式 - 在线工具

    2024-06-18 15:30:07       31 阅读
  6. 从史上最惨618看经济趋势

    2024-06-18 15:30:07       27 阅读
  7. 【HarmonyOS NEXT】鸿蒙customScan (自定义界面扫码)

    2024-06-18 15:30:07       30 阅读
  8. mysql中社区版如何查看进程中sql

    2024-06-18 15:30:07       30 阅读
  9. Python自动化(3)——鼠标模拟

    2024-06-18 15:30:07       29 阅读