class Solution(object):
def maximalRectangle(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
Lenx=len(matrix)
if Lenx==0:return 0
Leny=len(matrix[0])
dp=[[0 for y in range(Leny+1)]for x in range(Lenx+1)]
for i in range(Lenx):
for j in range(Leny-1,-1,-1):
if matrix[i][j]=='1':
dp[i][j]=dp[i][j+1]+1
ans=0
for i in range(Leny):
heights=[]
for j in range(Lenx):
heights.append(dp[j][i])
ans=max(ans,self.largestRectangleArea(heights))
return ans
def largestRectangleArea(self, heights):
"""
:type heights: List[int]
:rtype: int
"""
ans=0
heights.append(0)
stack=[]
stack.append((0,-1))#(value,position)
Len=len(heights)
for i in range(Len):
top=stack[-1]
if heights[i]>top[0]:
stack.append((heights[i],i))
elif heights[i]<top[0]:
while(heights[i]<stack[-1][0]):
ans=max((i-stack[-1][1])*stack[-1][0],ans)
p=stack[-1][1]
stack.pop()
stack.append((heights[i],p))
return ans
LeetCode-85-Maximal Rectangle 类似上一题,n遍单调栈
最新推荐文章于 2022-08-24 09:58:28 发布
本文介绍了一种求解二维矩阵中最大全'1'矩形面积的算法。该算法通过动态规划计算每行连续'1'的数量,并将其转化为柱状图问题求解最大矩形面积。最终遍历所有行并取最大值作为结果。
665

被折叠的 条评论
为什么被折叠?



