zoukankan      html  css  js  c++  java
  • 221.最大正方形(动态规划)

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

    上班之余还是要保持稳定的刷题习惯。

    做完本题后回忆了四道DP的题: 爬楼梯,打家劫舍,最短路径和,最大正方形。

    发现动态规划思考量最大的还是动态转移方程

    1.本题的关键点就是想通,状态转移方程,dp[ i ][ j ] = min(dp[ i-1 ][ j-1 ] , dp[ i-1 ][ j ] , dp[ i ][ j-1 ]) + 1, 可以结合上图想一下 边长2推出边长3的过程。

    2.由于第一行第一列的元素是没有三个相邻元素来索引,所以需要构造半层padding

      dp = [ [ 0 for _ in range(n+1)] for _ in range(m+1) ]

    代码:

    class Solution:
        def maximalSquare(self, matrix: List[List[str]]) -> int:
            if not matrix: return 0 
            
            m = len(matrix)
            n = len(matrix[0])
            dp = [[0 for _ in range(n+1)] for _ in range(m+1)]
            for i in range(1,m+1):
                for j in range(1,n+1):
                    if matrix[i-1][j-1] == '1':
                        dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1
            maxlist = [max(row) for row in dp]
            print(dp)
            return max(maxlist)**2
  • 相关阅读:
    RecycleView使用心得【2】
    URL解析
    CSS 动画总结
    包含块 width 和 height 值的总结
    JS 获取页面大小
    常见跨域方法原理及其用例
    CSS 计数器
    JS 对象总结
    JS 原型以及原型链
    关于未能找到源文件“.NETFramework,Version=v4.0.AssemblyAttributes.cs”问题
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12349768.html
Copyright © 2011-2022 走看看