0
点赞
收藏
分享

微信扫一扫

吃掉LeetCode之2022/2/26

吃掉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
举报

相关推荐

0 条评论