利用python 完成leetcode85 最大矩形

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

示例:

输入:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
输出: 6

思路
见84题https://blog.csdn.net/qq_37369124/article/details/87925635
遍历每一行,将从低部向上的连续1视为柱子
前一行
[“1”,“0”,“1”,“0”,“0”]
视为
[1,0,1,0,0],
前二行
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
视为
[2,0,2,1,1]
前三行
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
视为
[3,1,3,2,2]
前四行
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
视为[4,0,0,3,0]
每一行用84题的代码处理
代码

  def maximalRectangle(self, matrix):
        if not matrix or not matrix[0]:
            return 0
        n=len(matrix[0])
        heights=[0]*(n + 1)
        max_m=0
        for row in matrix:
            for i in range(n):
                heights[i] = heights[i] + 1 if row[i] == '1' else 0
            i = 0
            stack=[]
            while i < len(heights):
                if len(stack) == 0 or heights[stack[-1]] <= heights[i]:
                    stack.append(i)
                    i=i+1
                else:
                    while stack !=[] and heights[stack[-1]]>heights[i]:
                        a = stack.pop()
                        if stack == []:max_m = max(max_m,i * heights[a])
                        else: max_m = max(max_m,(i-stack[-1]-1) * heights[a])
        return max_m
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值