Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
Solutions
I. Solution by finding largest rectangle in histogram
- class Solution:
- # @param matrix, a list of lists of 1 length string
- # @return an integer
- def maximalRectangle(self, matrix):
- if not matrix:
- return 0
- h, w = len(matrix), len(matrix[0])
- m = [[0]*w for _ in range(h)]
- for j in range(h):
- for i in range(w):
- if matrix[j][i] == '1':
- m[j][i] = m[j-1][i] + 1
- return max(self.largestRectangleArea(row) for row in m)
- def largestRectangleArea(self, height):
- '''''
- This uses the way we calculate maximum rectangle in histogram
- '''
- height.append(0)
- stack, area = [], 0
- for i in range(len(height)):
- while stack and height[stack[-1]] > height[i]:
- h = height[stack.pop()]
- w = i if not stack else i-stack[-1]-1
- area = max(area, h*w)
- stack.append(i)
- return area
No comments:
Post a Comment