[Solved] Given a rows x cols binary matrix filled with 0’s and 1’s, find the largest rectangle containing only 1’s and return its area.

Machine Learning Projects

Table of Contents

Question

Given a rows x cols binary matrix filled with 0‘s and 1‘s, find the largest rectangle containing only 1‘s and return its area.

Example 1:

Machine Learning Projects
Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
Output: 6
Explanation: The maximal rectangle is shown in the above picture.

Example 2:

Input: matrix = [["0"]]
Output: 0

Example 3:

Input: matrix = [["1"]]
Output: 1

Constraints:

  • rows == matrix.length
  • cols == matrix[i].length
  • 1 <= row, cols <= 200
  • matrix[i][j] is '0' or '1'.

Python Solution

class Solution:
    def maximalRectangle(self, rect: List[List[str]]) -> int:
        def largestRectangleArea(A):
            stack = []
            maxi = 0
            i = 0
            while i<len(A):
                if len(stack)==0 or A[stack[-1]]<=A[i]:
                    stack.append(i)
                    i+=1
                else:
                    top = stack.pop()
                    if len(stack)==0:
                        ar = A[top]*(i)
                    else:
                        ar = A[top]*(i-stack[-1]-1)
                    maxi = max(maxi,ar)
        
            while len(stack)!=0:
                top = stack.pop()
                if len(stack)==0:
                    ar = A[top]*(i)
                else:
                    ar = A[top]*(i-stack[-1]-1)
                maxi = max(maxi,ar)
        
            return(maxi)
        
        
        if rect==[]:return 0
        rows = len(rect)
        cols = len(rect[0])
        for i in range(rows):
            for j in range(cols):
                rect[i][j] = int(rect[i][j])
        
    
        m = largestRectangleArea(rect[0])

        
        
        for i in range(1,rows):
            for j in range(cols):
                if rect[i][j]==1:
                    rect[i][j] = rect[i-1][j]+1
            m = max(m,largestRectangleArea(rect[i]))
        
        return (m)

Leave a Comment

Your email address will not be published.