zoukankan      html  css  js  c++  java
  • PHP算法之统计全为 1 的正方形子矩阵

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

    示例:

    输入:

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

    输出: 4

    来源:力扣(LeetCode)

    解题思路
    给定矩阵每一个1 代表边长为1的正方形,0代表不存在;
    dp[dp[i][$j]存储当前位置的的最大边长

    这边使用循环 遍历方式存储可能存在的值

    1.x 代表矩阵的列数,x代表矩阵的列数,y代表矩阵的行数
    2.当i==0||i==0∣∣j==0||matrix[matrix[i][j]==0,将对应位置的值存入 3.j]==0,将对应位置的值存入3.dp[i][i][j]=min(dp[dp[i-1][j],j],dp[i-1][i−1][j-1],dp[dp[i][$j-1])+1;
    利用min()函数比较获取边长中是否存在0,存在重新开始;
    4.边长相乘

    代码
    class Solution {

    /**
    * @param String[][] $matrix
    * @return Integer
    */
    function maximalSquare($matrix) {
    $x = count($matrix[0]); //列数
    $y = count($matrix); //行数
    $max=0;
    for($i=0;$i<$y;$i++){
    for($j=0;$j<$x;$j++){
    if($i==0||$j==0||$matrix[$i][$j]==0){
    $dp[$i][$j]=$matrix[$i][$j];
    }else{
    $dp[$i][$j]=min($dp[$i-1][$j],$dp[$i-1][$j-1],$dp[$i][$j-1])+1;

    }
    if($dp[$i][$j]>$max)
    $max=$dp[$i][$j];
    }
    }
    return $max*$max;
    }

  • 相关阅读:
    前端线上项目汇总
    gulp构建工具学习汇总
    ES6知识点汇总
    页游技术点汇总中
    前后端方案汇总
    vim常用命令
    互联网哲学
    js调试技巧汇总中
    windows下Docker安装MySQL
    RabbitMQ几个常用面试题
  • 原文地址:https://www.cnblogs.com/corvus/p/11988661.html
Copyright © 2011-2022 走看看