85 最大矩形

2021-10-02 03:27:37 字數 3070 閱讀 7407

高度更新的過程:

邊界的更新:

這種方法和常規的動態規劃有差別,沒有常規的dp矩陣定義。但是在行向下變化的時候,也是利用之前的狀態。

class solution(object):

def update(self,i,j,dp):

length = dp[i][j][0]

height = dp[i][j][1]

area = 0

for count in range(height):

length = min(dp[i-count][j][0],length)

area = max(area,length*(count+1))

return area

def maximalrectangle(self, matrix):

""":type matrix: list[list[str]]

:rtype: int

"""if not matrix:

return 0

res = 0

dp = [[[0,0,0]for _ in range(len(matrix[0]))]for _ in range(len(matrix))]

for i in range(len(matrix)):

for j in range(len(matrix[0])):

if matrix[i][j]=="0":

continue

else:

if i==0 and j==0:

dp[i][j]=[1,1,1]

res = max(res,dp[i][j][2])

elif i==0:

dp[i][j]=[dp[i][j-1][0]+1,1,dp[i][j-1][2]+1]

res = max(res,dp[i][j][2])

elif j==0:

dp[i][j]=[1,dp[i-1][j][1]+1,dp[i-1][j][2]+1]

res = max(res,dp[i][j][2])

else:

dp[i][j]=[dp[i][j-1][0]+1,dp[i-1][j][1]+1,0]

dp[i][j][2]=self.update(i,j,dp)

res = max(res,dp[i][j][2])

return res

dp的定義:[該點向左最大長度,該點向上最大高度,該點所能組成的矩形最大面積]

狀態轉移:根據之前的狀態,能夠知道當前點,向前最大的長度和向上最大的高度。但是不一定就是這個最大長度和高度就能組成最大矩形,因為這矩形裡面可能有"0"。所以要遍歷這個區域(最大長度和高度組成的矩形區域)找到最大矩形,儲存最大面積。

85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6 方法 按層分割法 思路 按層生成從頭部開始,生成每一層的柱狀圖,然後求得改層的所能達到的最大面積,直到遍歷完...

85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6 使用柱狀圖 棧 defmaximalrectangle matrix if not matrix retur...

85 最大矩形

題目 思路 這一題的演算法本質上和84題largest rectangle in histogram一樣,對每一行都求出每個元素對應的高度,這個高度就是對應的連續1的長度,然後對每一行都更新一次最大矩形面積。那麼這個問題就變成了largest rectangle in histogram。本質上是對...