zoukankan      html  css  js  c++  java
  • leetcode 221. 最大正方形

    题目描述:

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

    思路分析:

    一道动态规划的题。由于是正方形,首先单一的‘1’即为最小的正方形,接下来需要考察其外围区域是否为1。具体来说,dp[i][j]表示包含该点的最大正方形的边长。同时不断去更新这个最大边长。这里的递推是从前向后,如dp[i][j]=1,那么需要看dp[i-1][j],dp[i][j-1]以及dp[i-1][j-1]三个部分,动态递推公式为dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1,更新最大边长。需要注意两个边界,即第一行和第一列,直接判断01,赋值即可。

    代码:

     1 class Solution {
     2 public:
     3     int maximalSquare(vector<vector<char>>& matrix) {
     4         int row = matrix.size();
     5         if(row == 0)
     6             return 0;
     7         int col = matrix[0].size();
     8         vector<vector<int>> res(row, vector<int>(col, 0));
     9         int maxval = 0;
    10         for(int i=0; i<row; i++)
    11         {
    12             res[i][0] = matrix[i][0]-'0';
    13             maxval = max(maxval, res[i][0]);
    14         }
    15         for(int i=0; i<col; i++)
    16         {
    17             res[0][i] = matrix[0][i]-'0';
    18             maxval = max(maxval, res[0][i]);
    19         }
    20         for(int i=1; i<row; i++)
    21         {
    22             for(int j=1; j<col; j++)
    23             {
    24                 if(matrix[i][j] == '0')
    25                     res[i][j] = 0;
    26                 else
    27                 {
    28                     res[i][j] = min(res[i-1][j-1], min(res[i-1][j], res[i][j-1]))+1;
    29                     maxval = max(maxval, res[i][j]);
    30                 }
    31             }
    32         }
    33         return maxval*maxval;
    34     }
    35 };
  • 相关阅读:
    Android拍照+方形剪裁——附代码与效果图
    Caffe源代码中Solver文件分析
    Java学习笔记五(多线程)
    setTimeout和setInterval的区别
    javascript中this的妙用
    javascript基于原型的语言的特点
    css样式小技巧
    html块元素和内联元素
    怎么解决浏览器兼容性问题
    高效率、简洁、CSS代码优化原则
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11323197.html
Copyright © 2011-2022 走看看