题目:
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
解答:
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
if not matrix:
return 0
m=len(matrix)
n=len(matrix[0])
count=[[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
t=j
#记录当前元素matrix[i][j]左边有几个连续1
while t>=0 and matrix[i][t]=="1":
count[i][j]+=1
t-=1
#用res记录最终结果
res=0
#以当前元素为1矩阵的右下角元素,通过计算宽度和面积,进一步得出1矩阵的最大面积
for i in range(m):
for j in range(n):
width=area=count[i][j]
#若当前元素不为0,用area记录 以当前元素为右下角元素的1矩阵的最大面积
if width!=0:
t=i-1
while t!=-1:
width=min(width,count[t][j])
area=max(area,(i-t+1)*width)
t-=1
res=max(res,area)
return res