找到1s

时间:2015-10-25 05:42:15

标签: python algorithm

我正在调试以下问题并发布问题声明和代码。我的问题是,我认为for循环(对于范围(m)中的i和xrange(n)中的j)是不正确的,因为它只考虑顶行的矩形?如果我错了,请随时纠正我。感谢。

给定一个填充0和1的二进制矩阵,找到包含所有1的最大矩形并返回其区域。

def maximalRectangle(self, matrix):
    if not matrix:
        return 0
    m, n, A = len(matrix), len(matrix[0]), 0
    height = [0 for _ in range(n)]
    for i in range(m):
        for j in xrange(n):
            height[j] = height[j]+1 if matrix[i][j]=="1" else 0
        A = max(A, self.largestRectangleArea(height))
    return A


def largestRectangleArea(self, height):
    height.append(0)
    stack, A = [0], 0
    for i in range(1, len(height)):
        while stack and height[stack[-1]] > height[i]: 
            h = height[stack.pop()]
            w = i if not stack else i-stack[-1]-1 
            A = max(A, w*h)
        stack.append(i)
    return A

1 个答案:

答案 0 :(得分:4)

我的Java解决方案:

RunGuard