leetcode最大矩形 (动态规划 python)
描述
給你一個(gè)二維矩陣,權(quán)值為False和True,找到一個(gè)最大的矩形,使得里面的值全部為True,輸出它的面積
您在真實(shí)的面試中是否遇到過(guò)這個(gè)題?
樣例
樣例1
輸入:
[
[1, 1, 0, 0, 1],
[0, 1, 0, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 0, 1]
]
輸出: 6
樣例2
輸入:
[
[0,0],
[0,0]
]
輸出: 0
解題思路
假設(shè)我們輸入的矩形第一行數(shù)時(shí)是:
[1, 1, 1, 0, 1,1,0,1,1]
我們統(tǒng)計(jì)這行的最大寬度:
得到數(shù)組a如下:
a=1,2,3,0,1,2,0,1,2]
正式解題:
1.輸入矩形
[
[1, 1, 0, 0, 1],
[0, 1, 0, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 0, 1]
]
maxarea=0
2.然后對(duì)矩形的第一行統(tǒng)計(jì)最大寬度
得到寬度數(shù)組:
[1,2,0,0,1]
計(jì)算最大面積=2
更新maxarea
3.然后對(duì)矩形的第二行統(tǒng)計(jì)最大寬度:
得到寬度數(shù)組:
[0, 1, 0, 0, 1]
計(jì)算面積:分兩步
第一步:計(jì)算當(dāng)前寬度數(shù)組最大面積為1 如果大于maxarea 則更新maxarea
第二步 :計(jì)算當(dāng)前寬度數(shù)組和上一寬度數(shù)組產(chǎn)生的最大面積:
最大面積應(yīng)為同一列數(shù)的(最小值) 乘以 (行數(shù))
結(jié)果為1乘以2=2
如果大于maxarea 則更新maxarea
4.然后對(duì)矩形的第三行統(tǒng)計(jì)最大寬度:
得到寬度數(shù)組[0, 0, 1, 1, 1]
在計(jì)算這行產(chǎn)生的最大面積時(shí)。
第一步只把第三行寬度數(shù)組,計(jì)算只有第三行寬度度數(shù)組產(chǎn)生的最大面積:結(jié)果1 如果大于maxarea 則更新maxarea
第二步: 計(jì)算(第三行寬度數(shù)組,第二行寬度數(shù)組)最大面積 2
如果大于maxarea 則更新maxarea
第三步:最后在計(jì)算(第三行寬度數(shù)組,第二行寬度數(shù)組 ,第一行寬度數(shù)組)的最大面積。如果大于maxarea 則更新maxarea
后面類似:
整個(gè)過(guò)程應(yīng)該是個(gè)動(dòng)態(tài):
代碼如下:
結(jié)果:6
總結(jié)
以上是生活随笔為你收集整理的leetcode最大矩形 (动态规划 python)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode最大子序和 (动态规划)
- 下一篇: python时间戳转换并pandas批量