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;
    }

  • 相关阅读:
    JS使用小记
    CSS使用小记
    POST Raw JSON提交
    获取当月的某天
    bootstrap-datetimepicker的中文显示问题
    学习总结——Selenium元素定位
    Android常用控件及对应Robotium API
    Junit4断言
    Junit3断言
    Robotium怎样判断测试结果
  • 原文地址:https://www.cnblogs.com/corvus/p/11988661.html
Copyright © 2011-2022 走看看