首页 > 其他分享 >最大矩形(单调栈)

最大矩形(单调栈)

时间:2025-01-11 12:33:38浏览次数:1  
标签:arr 最大 int res st left 矩形 单调 cur

题目链接: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;
    }
};

标签:arr,最大,int,res,st,left,矩形,单调,cur
From: https://www.cnblogs.com/benscode/p/18665459

相关文章

  • 子数组最小值(单调栈)
    题目链接:https://leetcode.cn/problems/sum-of-subarray-minimums/题意:给定一个数组,让你求子数组最小值的和,复杂度O(N)思路:单调栈(获得每个位置左边比它小且离它最近的数,右边比它小且离它最近的数,那么在这之间它本身就是区间最小值)classSolution{public:intsumSubarr......
  • 随笔:我为什么没有把《P5369 [PKUSC2018] 最大前缀和》做出来
    这是一篇随笔(绝对不是某CC风格的随笔)特别提醒:某W同学,再被【数据删除】要求写【数据删除】时你可以看一看这个大纲。我在干什么我在考【数据删除】时,开完题目后,我断定我就要解决这一道题。看见\(20\)这个小范围以后我就想起上一把【数据删除】的T【数据删除】。我就想DP......
  • 每日温度(单调栈)
    题目链接:https://leetcode.cn/problems/daily-temperatures/题意:给你一个每日气温数组,请你确定每个位置右边是否比自己大的元素,如果无,返回0。否则,返回两者下标之差思路:单调栈(这就好似给了数组中每个位置做波峰或波谷的机会)(ps:单调栈一定存的是下标i)classSolution{public......
  • 单调栈板子
    单调栈用于求解数组每个位置上左边/右边离自己最近的且严格小于/大于自己位置上的数的位置时间复杂度O(N)(每个元素下标进栈一次出栈一次)元素下标能表示的含义比元素本身要多(ps:注意数组长度,过大就要开到全局变量中,否则异常退出orz)方法(求每个位置上离自己最近且严格小于自己......
  • 线段树+最大最小
    https://codeforces.com/contest/2057/problem/D#include<bits/stdc++.h>#definelcp<<1#definercp<<1|1#defineINF2e9usingnamespacestd;#defineendl'\n'usingll=longlong;usingpii=pair<int,int>;constdoub......
  • 子数组最大累加和
    [Algo]子数组最大累加和1.最大子数组和i//1.最大子数组和i//https://leetcode.cn/problems/maximum-subarray/description/intmaxSubArray(vector<int>&nums){vector<int>dp(nums.size());//dp[i]-以i位置作为结尾的最大子数组和dp[0]=nums[0];......
  • 如何修改PHP最大文件上传大小限制
    默认情况下,PHP上传文件大小限制是2M,超过2M上传将会报错。如果我们上传的图片或压缩包超过2M,需要修改PHP的配置文件最大上传限制。找到PHP组件目录下的php.ini文件,使用记事本打开,查找post_max_size(允许POST数据大小)值修改成10M或更大,查找upload_max_filesize(允许上传文件大小)值,可......
  • 179. 最大数
    [题目链接](179.最大数-力扣(LeetCode))解题思路:x拼接y大于y拼接x后,那么x就应该放前面。自定义排序就行了。还要注意把前导0给去掉代码classSolution:defmyCompare(self,x,y):#比较两个字符串拼接后的结果ifstr(x)+str(y)>str(y)......
  • 2264. 字符串中最大的 3 位相同数字
    给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :该整数是 num 的一个长度为 3 的 子字符串 。该整数由唯一一个数字重复 3 次组成。以字符串形式返回 最大的优质整数 。如果不存在满足要......
  • 152. 乘积最大子数组
    [题目链接](152.乘积最大子数组-力扣(LeetCode))解题思路:子数组问题,考虑【以i结尾】结果是什么,求出所有的结果,最大的那个就是结果。【以i结尾】结果是什么?我们可以利用【i-1】计算过的内容。nums[i]如果是0,那么结果就是0nums[i]如果大于0,那么我们就希望得到【以i-1结尾......