85. Maximal Rectangle

https://leetcode.com/problems/maximal-rectangle/

Same approach as 84

Need to build a histogram based on the matrix

class Solution:
    def largestRectangle(self,nums):
        n = len(nums)
        left = [0] *n
        right = [0] * n
        for i in range(n):
            left[i] = i
            while left[i]- 1 >= 0 and nums[left[i]-1] >= nums[i]:
                left[i] = left[left[i]-1]
        
        for i in range(n-1,-1,-1):
            right[i] = i
            while right[i]+1 < n and nums[i] <= nums[right[i]+1]:
                right[i] = right[right[i]+1]
        
        res = 0
        for i in range(n):
            res = max(res,nums[i] * (right[i]-left[i]+1))
        return res
            
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        #build the nums row by row
        mat = [[int(i) for i in row] for row in matrix]
        
        for i in range(1,len(mat)):
            for j in range(len(mat[0])):
                if mat[i][j] == 1:
                    mat[i][j] += mat[i-1][j]
        
        res = 0
        for row in mat:
            res = max(res,self.largestRectangle(row))
        return res

Last updated

Was this helpful?