leetcode做题笔记85最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例 1:

 思路一:单调栈

int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize){
    int dp[matrixSize][matrixColSize[0] + 2];
    memset(dp, 0, sizeof(dp));//初始化
    for(int i = 0; i < matrixSize; i++)
    {
        for(int j = 0; j < matrixColSize[0]; j++)
        {
            if(matrix[i][j] == '1')
            {
                dp[i][j+1] = (i == 0 ? 0 : dp[i-1][j+1])+1;
            }
        }
    }
    int max = 0;
    for(int i = 0; i < matrixSize; i++)
    {
        int stack[matrixColSize[0]+2];
        int top = -1;
        stack[++top] = 0;
        for(int j = 1; j < matrixColSize[0]+2; j++)
        {
                while(dp[i][j] < dp[i][stack[top]])
                {
                    max = fmax(max, (j - stack[top-1] - 1) * dp[i][stack[top]]);
                    --top;
                }
                stack[++top] = j;
        }
    }
    return max;
}

 分析:

本题与上题相似,同为单调栈解法,可将矩形转换为长和宽,计算长宽的乘积最大值,根据单调递减递归到最小值计算矩形最大值,最后返回答案

总结:

本题考察单调栈的应用,除此之外本题还可用动态规划的方法解决,单调栈解法注意对数组处理,输入的为字符串,与数字处理方法有差异

猜你喜欢

转载自blog.csdn.net/si_mple_/article/details/132350530
今日推荐