Leetcode 221. Maximal Square 最大正方形

221. Maximal Square(Medium)

这道题剑指offer上也有,比较巧妙,暴力方法需要O(n*k),而双向队列缩短到了O(n)

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

Example:
Input:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Output: 4

不得不说这道题非常巧妙,把每个矩形的问题转换成了二维数组每个数与其正上、正左、左上三个坐标之间的关系,dp(i,j)表示点(i,j)为终点的最大正方形。转移方程式如下:

dp(i,j)=min(dp(i−1,j),dp(i−1,j−1),dp(i,j−1))+1.
image.png
    def maximalSquare(self, matrix):
        """
        :type matrix: List[List[str]]
        :rtype: int
        """
        if not matrix or not matrix[0]:
            return 0
        row = len(matrix)
        column = len(matrix[0])
        Max = 0
        dp = [[0 for j in range(column)] for i in range(row)]
        for i in range(0, row):
            for j in range(0, column):
                if i == 0 or j == 0:
                    dp[i][j] = int(matrix[i][j])
                elif matrix[i][j] == '1':
                    dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1
                else:
                    dp[i][j] = 0
                Max = max(Max,dp[i][j])
        return Max**2

还可以再优化,DP每个点的位置只与三个点有关。


    def maximalSquare(self, matrix):
        """
        :type matrix: List[List[str]]
        :rtype: int
        """
        if not matrix or not matrix[0]:
            return 0
        row = len(matrix)
        column = len(matrix[0])
        dp = [0]*(column + 1)
        maxlen = prev = 0
        for i in range(1, row+1):
            for j in range(1, column+1):
                temp = dp[j]
                if matrix[i-1][j-1] == '1':
                    dp[j] = min(dp[j-1], dp[j], prev) + 1
                else:
                    dp[j] = 0
                maxlen = max(maxlen,dp[j])
                prev = temp
        return maxlen**2
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目链接tag: Medium; Dynamic Programming; question:  Given a ...
    xingzai阅读 506评论 0 1
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,374评论 0 18
  • 体块分析的好
    yxzm888阅读 196评论 0 0
  • 为了实现死去伴侣未实现的狼王梦,母狼紫岚将这一愿望寄托于他们的孩子。随着孩子一个接一个死于非命,一次次近在咫尺的愿...
    Zhiya阅读 795评论 0 1
  • 周而复始,又到课堂上课了!现在发现上课的时间很珍贵,快考试了,压根没有意思去复习,自己都想给自己点个赞!这周超级忙...
    DeathKnightR阅读 66评论 0 0