【发布时间】:2016-01-24 10:08:54
【问题描述】:
我正在调试以下问题并发布问题陈述和代码。我的问题是,我认为 for 循环(for i in range(m) and for j in xrange(n))是不正确的,因为它只考虑顶行的矩形?如果我错了,请随时纠正我。谢谢。
给定一个用 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
【问题讨论】:
-
请遵循帮助文档中的发布指南。 MCVE 适用于此。显示您的程序不起作用的输入;显示你得到的输出(尤其是添加了调试打印语句)。你的问题描述没问题。最重要的是,您不应该问我们您的程序是否有效。你应该在发帖之前知道这一点。如果您不确定,请测试。当您发现问题时,我们会帮助您解决问题。