zoukankan      html  css  js  c++  java
  • LeetCode 85. 最大矩形

    题目链接

    85. 最大矩形

    题目分析

    这个题和最大正方形有点类似,但是这个是个矩形,所以需要特殊手段来求,但是总体来说dp的思路是没问题的。
    我们开一个三维数组dp[i][j][k], i代表第i行,j代表列,k代表两个方向上1的个数。
    dp[i][j][0] 就是matrix[i][j]水平方向累计多少个连续1, dp[i][j][1]就是matrix[i][j]竖直方向累计多少个1。
    这里为了方便计算,我们dp数组的i,j进行加1的偏移。
    我们每遍历到1的时候,都需要对以matrix[i][j]为右下角的矩形进行面积的计算。
    在计算的时候我们动态更新下当前矩形最高的高度,因为矩形高度取决于最短的那个。
    具体看代码吧。

    代码实现

    class Solution {
        public int maximalRectangle(char[][] matrix) {
            if(matrix.length == 0){
                return 0;
            }
            int[][][] dp = new int[matrix.length + 1][matrix[0].length + 1][2];
            int max = 0;
            for(int i = 1; i <= matrix.length; i++){
                for(int j = 1; j <= matrix[i - 1].length; j++){
                    if(matrix[i-1][j-1] == '1'){
                        dp[i][j][0] = dp[i][j-1][0] + 1;
                        dp[i][j][1] = dp[i-1][j][1] + 1;
                        int idx = dp[i][j][0];
                        int high = Integer.MAX_VALUE;
                        for(int k = 1; k <= idx; k++){
                            high = Math.min(high, dp[i][j - k + 1][1]);
                            max = Math.max(max, k * high);
                        }
                    }
                }
            }
            return max;
        }
    }
    
  • 相关阅读:
    数组逆序输出与简单的数据匹配
    冒泡排序及其优化
    类型转换
    Spring学习【Spring】
    logistic回归模型
    决策树算法(3)
    决策树算法(2)
    决策树算法(1)
    朴素贝叶斯算法
    k近邻算法
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13669164.html
Copyright © 2011-2022 走看看