最大矩形(单调栈)

题目链接:https://leetcode.cn/problems/maximal-rectangle/description/

题意:

给定一个只有0和1的矩阵,试求只包含1的长方形的最大面积

思路:

每行将矩阵压缩成一个高度数组,转化为求矩形最大面积

class Solution {
public:
    int maximalRectangle(vector<vector<char>>& matrix) {
        int n=matrix.size();
        int res=0;
        int m=matrix[0].size();
        int arr[205];
        memset(arr,0,sizeof(arr));
        for(int i=0;i<n;i++)
        {

            for(int j=0;j<m;j++)
            {
                if(matrix[i][j]=='0')
                {
                    arr[j]=0;
                }else{
                    arr[j]=arr[j]+1;
                }   
            }
            int st[205];int r=0,cur;
            for(int j=0;j<m;j++)
            {
                while(r>0&&arr[st[r-1]]>=arr[j])
                {
                    cur=st[--r];
                    int left=r>0?st[r-1]:-1;
                    res=max(res,arr[cur]*(cur-left-1)+arr[cur]*(j-cur));
                }
                st[r++]=j;
            }
            while(r>0)
            {
                cur=st[--r];
                int left=r>0?st[r-1]:-1;
                res=max(res,arr[cur]*(cur-left-1)+arr[cur]*(m-cur));
            }
        }
        return res;
    }
};
posted @ 2025-01-11 12:20  Marinaco  阅读(41)  评论(0)    收藏  举报
//雪花飘落效果