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

    该题是要算出矩阵中由“1”构成正方形的区域面积。

    这个题目一开始想到的方法是遍历整个矩阵,每次遇到“1”, 检测从这个“1”开始是否构成正方形,检测方法是检测现有为“1”的区域的右边和下边的外围是否为“1”, 如果外围都是“1”的话,这些“1”就构成了新的正方形区域,然后继续检测新的区域外围是否都是“1”,用这个形式不断外推。最后获取最大正方形区域的面积。

    但是这个方法的时间复杂度还是比较高的。

    后面使用的是动态规划的方法。建立一个新的与输入矩阵等宽等长的整型数组,每个元素记录元素所处位置左上方构成最大正方形区域的边长,使用的核心代码为:

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

    代码如下:

     1 class Solution {
     2     public int maximalSquare(char[][] matrix) {
     3         
     4         int rows = matrix.length, cols = rows > 0 ? matrix[0].length:0;
     5         int[][] dp = new int[rows+1][cols+1];
     6         int maxlen = 0;
     7         
     8         for( int i = 1 ; i <= rows ; i++){
     9             for( int j = 1 ; j <= cols ; j++){
    10                 if( matrix[i-1][j-1] == '1'){
    11                     dp[i][j] = Math.min(Math.min(dp[i][j-1], dp[i-1][j-1]), dp[i-1][j]) + 1;
    12                     maxlen = Math.max(dp[i][j], maxlen);
    13                 }
    14                
    15             }    
    16         }
    17         
    18         return maxlen*maxlen;
    19     }
    20 }

    END

  • 相关阅读:
    Hive和HBase的区别
    HBase面试问题
    HBase的rowkey的设计原则
    一、spark 数据类型(Data Types)
    Phaser显示对象(文字)
    Phaser中的组对象group
    Phaser中的动画
    phaser.js 显示对象笔记
    MD5之C#密码加密备忘录
    学了点小小的技巧,也有一点点问题,怎么解决呢?
  • 原文地址:https://www.cnblogs.com/sssysukww/p/9039450.html
Copyright © 2011-2022 走看看