zoukankan      html  css  js  c++  java
  • 221. Maximal Square

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

    For example, given the following matrix:

    1 0 1 0 0
    1 0 1 1 1
    1 1 1 1 1
    1 0 0 1 0
    

    Return 4.

    本题一定要注意,做动态规划方法的时候,dp里面的值不能够存储面积属性,之能存储边长。因为面积属性到时候还需要开平方根。代码如下:

    public class Solution {

        public int maximalSquare(char[][] matrix) {

            if(matrix==null||matrix.length==0||matrix[0].length==0) return 0;

            int m = matrix.length;

            int n = matrix[0].length;

            int max = 0;

            int[][] dp = new int[m][n];

            for(int i=0;i<m;i++){

                if(matrix[i][0]=='1') dp[i][0] = 1;

                max = Math.max(dp[i][0],max);

            }

            for(int i=0;i<n;i++){

                if(matrix[0][i]=='1') dp[0][i] = 1;

                max = Math.max(dp[0][i],max);

            }

            for(int i=1;i<m;i++){

                for(int j=1;j<n;j++){

                    if(matrix[i][j]=='1'){

                        if(dp[i-1][j-1]!=0&&dp[i-1][j]!=0&&dp[i][j-1]!=0){

                            dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]))+1;

                            max = Math.max(max,dp[i][j]);

                        }else{

                            dp[i][j] = 1;

                        }

                    }

                }

            }

            return max*max;

        }

    }

  • 相关阅读:
    快速排序
    jenkins 升级
    JAVA中的Random()函数
    拦截器
    两个链表合并不加入新的链表空间
    统计字符 比如aaabbcca----3a2b1c1a
    折半查找两种实现
    字符串偏移
    java值传递
    基于zookeeper实现配置集中管理【转】
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6362011.html
Copyright © 2011-2022 走看看