吃掉LeetCode之2022/2/26
文章目录
85. 最大矩形
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
代码思路:
这个题我们需要转化成柱状图,然后再按84. 柱状图中最大的矩形的方法解题
转化柱状图过程如下图:
然后根据第上一个题的代码做就ok,我直接复制~~~~~~~
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
n=len(matrix[0])
heights=[0]*n
res=0
for i in matrix:
for j in range(n):
if i[j]=='0':heights[j]=0
else:heights[j]+=int(i[j])
res=max(res,self.largestRectangleArea(heights))
return res
def largestRectangleArea(self, heights: List[int]) -> int:
n = len(heights)
left, right = [0] * n, [0] * n
stack=[]
for i in range(n):
while stack and heights[stack[-1]]>=heights[i]:
stack.pop()
if stack:left[i]=stack[-1]
else:left[i]=-1
stack.append(i)
stack=[]
for i in range(n-1,-1,-1):
while stack and heights[stack[-1]]>=heights[i]:
stack.pop()
right[i]=stack[-1] if stack else n
stack.append(i)
res = max((right[i] - left[i] - 1) * heights[i] for i in range(n)) if n > 0 else 0
return res