给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
输出: 6
第一次的 代码:
我们首先遍历每一行,首先建立一个列表h,以第一行为底,用来保存在新遍历每一行之后,可行的高度,这个高度不是简单的累加,而是当遇到不是断层时,变为0。从第一行开始,每行都要计算最大面积,直到遍历到最后一行。计算最大面积的方法,和上一题一样。
h表示遍历到当前行的可行高度,每一行都要计算最大面积,而当遇到0时,可行高度肯定就不能保持原数了,应归零,继续用可行高度计算最大面积
if not matrix :
return 0
n=len(matrix)
m=len(matrix[0])
h=[0]*m
ms=0
for i in range(n):
temp=[]
for j in range(m+1):#设置m+1是为了不漏计算,像上一题我们是+[0],一样的效果
if j<m:
h[j]=(h[j]+1)if matrix[i][j]=='1' else 0 #若遇到0,则高度为0,看图解
while temp and (j==m or h[temp[-1]]>h[j]): #当出现不增墙
height=h[temp.pop()]
ms=max(ms,height*(j-1-(temp[-1] if temp else -1)))
temp.append(j) #将新不增墙加入递增栈temp
return ms
116ms,排名75%