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

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 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.

    Credits:
    Special thanks to @Freezen for adding this problem and creating all test cases.

    题目是要找出元素全为1 的最大正方形。使用DP,递推式为:

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

    dp[i][j] 表示到该位置出现的正方形的边长,dp[i][j] 要构成一个新的正方形,只能从之前的左边,上边,左上 三个里面取边长最小的加上matrix[i][j] 为1 的情况,即边长+1.
     1 public class Solution {
     2     public int maximalSquare(char[][] matrix) {
     3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0;
     4         int m = matrix.length,n = matrix[0].length;
     5         int[][] dp = new int[m][n];
     6         int len = 0;
     7         for(int i = 0; i<m; i++){
     8             if(matrix[i][0] == '1'){
     9                 dp[i][0] = 1;
    10                 len = 1;
    11             }
    12         }
    13         for(int i = 0; i<n; i++){
    14             if(matrix[0][i] == '1'){
    15                 dp[0][i] = 1;
    16                 len = 1;
    17             }
    18         }
    19         for(int i = 1; i < m; i++){
    20             for(int j = 1; j < n; j++){
    21                 if(matrix[i][j] == '1'){
    22                     dp[i][j] = Math.min(dp[i-1][j],Math.min(dp[i][j-1],dp[i-1][j-1])) + 1;
    23                     len = dp[i][j] > len ? dp[i][j] : len;
    24                 }
    25             }
    26         }
    27         return len*len;
    28     }
    29 }
  • 相关阅读:
    创建一个新的进程os.fork
    进程的特征
    进程的状态
    多进程概念
    IO多路复用
    Objective-C 和 C++中指针的格式和.方法 和内存分配
    生活需要奋斗的目标
    iOS 关于UITableView的dequeueReusableCellWithIdentifier
    哈哈,发现了刚毕业时发布的求职帖子
    iOS 和Android中的基本日期处理
  • 原文地址:https://www.cnblogs.com/guoguolan/p/5635328.html
Copyright © 2011-2022 走看看