给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
示例 2:
输入:matrix = []
输出:0
示例 3:
输入:matrix = [["0"]]
输出:0
示例 4:
输入:matrix = [["1"]]
输出:1
示例 5:
输入:matrix = [["0","0"]]
输出:0
思路:动态规划 + 柱状优化
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
left = [[-1 for i in matrix[0]] for _ in matrix]
for i in range(len(matrix)):
left[i][0] = 1 if(matrix[i][0] == '1') else 0
for i in range(len(matrix)):
for j in range(1,len(matrix[0])):
if(matrix[i][j] == '0'):left[i][j] = 0
else:left[i][j] = left[i][j-1] + 1
maxArea = 0
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if(left[i][j] == 0):continue
width = left[i][j]
m = i - 1
area = width
while(m>=0):
if(left[m][j] == 0):break
width = min(width,left[m][j])
area = max(area,width * ((i-m)+1))
m -= 1
maxArea = max(area,maxArea)
return maxArea