largest rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

\

题目要求最大的只含有1的矩形。

\

算法是, 计算每个点能向上连续为1的线段长度H[i][j], 这个线段能往左边拓展的位置L[i][j], 能往右边拓展的位置R[i][j]。

\

如图所示,对于点A来说,向上连续为1的红箭头长度为4,H[4][1] = 4。这个红箭头向左右拓展为矩形,能移动到最左边的位置L[4][1] = 1, 能移动到最右边的位置R[4][1] = 2(L包含在矩阵内,R不包含)。点A对应的矩形面积就是H * (R - L) = 4。

对于点B,H[3][2] = 3, L[3][2] = 1, R[3][2] = 4。对应的面积H * (R - L) = 9。遍历所有点,求最大的面积。因为计算是只会用一次H, L, R的数据,所以用一维数组而不是二维数组来计算。


但是,当我们在数这个矩形的时候越来越像leetcode_question_85 Largest Rectangle in Histogram这道题了,不是吗?我们讨论了柱状图的最大矩形面积,那可以O(n)的,学以致用呀!btw,leetcode的这两题也是挨一块儿的,用心良苦。。。。

上面的矩阵就成这样了:


每一行都是一次柱状图的最大矩形面积了。dp[i][j]就是当前的第j列到第i行连续1的个数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值