码迷,mamicode.com
首页 > 其他好文 > 详细

436. 最大正方形

时间:2020-07-16 12:11:32      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:testcase   lis   tin   ble   str   rip   main   int   ==   

436. 最大正方形

中文English

在一个二维01矩阵中找到全为1的最大正方形, 返回它的面积.

样例

样例 1:

输入:
[
  [1, 0, 1, 0, 0],
  [1, 0, 1, 1, 1],
  [1, 1, 1, 1, 1],
  [1, 0, 0, 1, 0]
]
输出: 4

样例 2:

输入: 
[
  [0, 0, 0],
  [1, 1, 1]
]
输出: 1
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 动态规划 + 滚动数组

class Solution:
    """
    @param matrix: a matrix of 0 and 1
    @return: an integer
    """
    def maxSquare(self, matrix):
        # write your code here
        #经典的dp问题
        if not matrix: return 0
        
        #以当前点作为正方形的右下角,然后计算正方形的边长,滚动数组
        len_x, len_y = len(matrix), len(matrix[0])
        dp = [[0 for _ in range(len_y)], [0 for _ in range(len_y)]]
        result = 0 
        boder = 0 
        
        #边界情况
        for j in range(len_y):
            dp[0][j] = matrix[0][j]

        if len_x == 1:
            boder = max(matrix[0])
            
        #计算顺序
        for i in range(1, len_x):
            #边界情况
            dp[i%2][0] = matrix[i][0]
            for j in range(1, len_y):
                if (matrix[i][j] == 0):
                    dp[i%2][j] = 0
                    continue
                
                dp[i%2][j] = min(dp[(i - 1)%2][j], dp[i%2][j - 1], dp[(i - 1)%2][j - 1]) + 1
            boder = max(boder, max(dp[i%2]))
        
        return boder*boder

 

436. 最大正方形

标签:testcase   lis   tin   ble   str   rip   main   int   ==   

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13312643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!