LeetCode 85. 最大矩形

原题目:https://leetcode-cn.com/problems/maximal-rectangle/

 

思路:

本题是上一个题目的变型,稍作分析我们不难发现,我们对每一行的每一个点抽取其高度,其实就是一个求柱状图中最大矩形面积的问题,leetcode 84。

实现:

我们采用数组dp记录每一个点的高度,dp的大小为matrix[0].size()。那么本行的dp如何求取:

1、如果matrix[i][j]=='0',其柱状图的高度为0,dp[j] = 0;

2、如果为'1',柱状图的高度就是上一行柱状图高度+1,dp[j] = dp[j] + 1;

然后对每一行求出最大矩形面积,最后用ans记录所有行中最大的矩形面积,返回即可。

 

代码:

class Solution {
public:
    //84题的结果,单调栈实现的最大矩形
    int largestRectangleArea(vector& heights) {
        int n=heights.size();
        vector left(n),right(n,n);
        stack mono_stack;
        mono_stack.push(-1);
        
        for(int i=0;i=heights[i]){
                right[mono_stack.top()]=i;
                mono_stack.pop(); 
            }
            left[i] = mono_stack.top();
            mono_stack.push(i);
        }
        int ans = 0;
        for(int i=0;i>& matrix) {
        if(matrix.size()==0) return 0;
        int n=matrix.size(),m = matrix[0].size();
        int ans=0;
        vector dp(m);

        // 实现一行
        for(int i=0;i

 

你可能感兴趣的:(LeetCode)