zoukankan      html  css  js  c++  java
  • leetcode221

    int maximalSquare(vector<vector<char>>& matrix) {
            int height=matrix.size();
            if(height==0)
                return 0;
            int width=matrix[0].size();
            vector<vector<int>>  vec(height,vector<int>(width,0));
            int result=0;
            for(int i=0;i<height;i++)
            {
                for(int j=0;j<width;j++)
                {
                    if(matrix[i][j]=='1')
                    {
                        vec[i][j]=1;
                        if(i>0&&j>0)
                            vec[i][j]+=min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]);
                    }
                    result=max(result,vec[i][j]);
                }
            }
            return result*result;
            
        }

    本题是动态规划的题目,vec[i,j]记录的是以matrix[i,j]为右下角的所能构成的正方形区域的边长最大值。

    递推公式,vec[i][j] = 1 + min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]),计算的是当前单元格的“左”、“上”、“左上”三个单元格的最小值,再+1。

    补充一个python的实现:注意i和j的值在matrix和dp中表示位置不同。

     1 class Solution:
     2     def maximalSquare(self, matrix: 'List[List[str]]') -> 'int':
     3         m = len(matrix)
     4         if m == 0:
     5             return 0
     6         n = len(matrix[0])
     7         dp = [[0 for _ in range(n+1)]for _ in range(m+1)]
     8         res = 0
     9         for i in range(m):
    10             for j in range(n):
    11                 if matrix[i][j] == '1':
    12                     dp[i+1][j+1] = min(min(dp[i][j+1],dp[i+1][j]),dp[i][j]) + 1
    13                     res = max(res,dp[i+1][j+1])
    14         return res * res

    例如:对于输入测试样本,当遍历到红色的数字1时(i=2,j=3)

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

    当i=2  j=3时,dp[3][4]的值是:dp[2][3]、dp[2][4]、dp[3][3]这三个位置的最小值1,再加上1。因此dp[3][4] = 1 + 1 = 2(即下图中的红色方框区域的计算)。

    按照次递推公式计算,可得到如下二维数组dp:

  • 相关阅读:
    3.4函数重载和默认参数
    命名空间
    Pandas中DataFrame数据合并、连接(concat、merge、join)之concat
    使用python脚本进行数据清洗(1)
    python操作hive 安装和测试
    Microsoft Visual C++ 14.0 is required.
    hive传递参数与调用
    log1p和expm1
    github高速下载的方法
    group_concat()
  • 原文地址:https://www.cnblogs.com/asenyang/p/9787674.html
Copyright © 2011-2022 走看看