• 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

  • 相关阅读:
    刚下飞机——Alpha冲刺 总结随笔
    刚下飞机——Alpha冲刺Day10
    刚下飞机——Alpha冲刺Day9
    刚下飞机——Alpha冲刺Day8
    刚下飞机——Alpha冲刺Day7
    快乐就队——Beta冲刺(1/7)
    快乐就队——凡事预则立
    快乐就队——Alpha冲刺问题总结&事后诸葛亮
    快乐就队——换组记录
    快乐就队——Alpha冲刺总结
  • 原文地址:https://www.cnblogs.com/sssysukww/p/9039450.html
Copyright © 2020-2023  润新知