Maximal Rectangle
题目描述
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
解题方法
brute force
取任意两点为两个对角点,然后check是否包含为0的元素。
O(n^6)
左上角
只取一个左上角,然后逐行找行能达到的最右边,计算面积
利用 largest rectangle in histogram
0 1 0 1 0
1 1 0 1 1
1 1 0 1 1
0 1 1 0 1
如果是一个这样的matrix, 逐行扫描的话,其实就是bar的高度
- 第一行 [0, 1, 0, 1, 0]
- 第二行 [1, 2, 0, 2, 1]
- 第三行 [2, 3, 0, 3, 2] ...
那么其实就是和largest rectangle in histogram一样的题目了
时间复杂度O(n ^ 2)
, 空间复杂度为O(n)
Solution
class Solution(object):
def maximalRectangle(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if not matrix:
return 0
rowNum = len(matrix)
colNum = len(matrix[0])
result = 0
height = [0 for j in range(colNum)]
for i in range(rowNum):
for j in range(colNum):
if matrix[i][j] == "0":
height[j] = 0
else:
height[j] += 1
curMax = self.largestRectangleArea(height)
result = curMax if curMax > result else result
return result