日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

leetcode最大矩形 (动态规划 python)

發(fā)布時(shí)間:2024/9/30 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode最大矩形 (动态规划 python) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

描述

給你一個(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):
代碼如下:

lass Solution:def maxmalRectangle(self , matrix):m = len(matrix)n = len(matrix[0])maxarea = 0dp = [[0]*n for _ in range(m)]for i in range(m):#遍歷每一列for j in range(n):#遍歷每一行if matrix[i][j] == 0:continuewidth = dp[i][j] = dp[i][j-1] + 1 if j else 1#計(jì)算最大寬度并使用它更新dpfor k in range(i,-1,-1):#倒序遍歷每一行width = min(width , dp[k][j])#最小寬度(同一列 上下幾行的最小【最大寬度】)maxarea = max(maxarea , width*(i - k + 1)) #同一列上下幾行的最小【最大寬度】*行數(shù)=當(dāng)前行最大面積return maxarea test = Solution() d=test.maxmalRectangle([[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] ]) print(d)

結(jié)果:6

總結(jié)

以上是生活随笔為你收集整理的leetcode最大矩形 (动态规划 python)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。