# 85 最大矩形

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

class Solution:
    
    def max_area(self,heights):
        stack = [-1]
        res = 0
        for i in range(len(heights)):
            while (stack[-1] != -1 and heights[i] <= heights[stack[-1]]):
                res = max(res, heights[stack.pop()] * (i - stack[-1] - 1))
            stack.append(i)

        while (stack[-1] != -1):
            res = max(res, heights[stack.pop()] * (len(heights) - stack[-1] - 1))
        return res
    
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        res = 0
        if len(matrix) == 0 or len(matrix[0]) == 0:
            return res
        heights = [0] * len(matrix[0])
        for i in range(len(matrix)):
            for j in range(len(matrix[i])):
                if matrix[i][j] == '0':
                    heights[j] = 0
                else:
                    heights[j] += 1
            res = max(res, self.max_area(heights))
        return res
        
def max_area(heights):
    stack = [-1]
    res = 0
    for i in range(len(heights)):
        while (stack[-1] != -1 and heights[i] <= heights[stack[-1]]):
            res = max(res, heights[stack.pop()] * (i - stack[-1] - 1))
        stack.append(i)

    while (stack[-1] != -1):
        res = max(res, heights[stack.pop()] * (len(heights) - stack[-1] - 1))
    return res


def maximalRectangle(matrix):
    res = 0
    if len(matrix) == 0 or len(matrix[0]) == 0:
        return res
    heights = [0] * len(matrix[0])
    for i in range(len(matrix)):
        for j in range(len(matrix[i])):
            if matrix[i][j] == '0':
                heights[j] = 0
            else:
                heights[j] += 1
        print(heights)
        res = max(res, max_area(heights))
    return res


matrix = [["0","1"],["1","0"]]

print(maximalRectangle(matrix))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容